From bafe2b2a321155a68bc7c8f74ee336808fe39b3b Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 11:53:40 -0700 Subject: [PATCH 01/52] Added RFC Error View --- 1-Draft/RFC00XX-Update-Error-View.md | 157 +++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 1-Draft/RFC00XX-Update-Error-View.md diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md new file mode 100644 index 00000000..f6b92240 --- /dev/null +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -0,0 +1,157 @@ +--- +RFC: Update $ErrorView with Single String Error Messages +Author: Jason Helmick +Status: Draft +Version: 0.0.0 +Area: PowerShell +Comments Due: +--- + +# Update $ErrorView with Single Line Error Messages + +When an error occurs in PowerShell, the customers on-screen error message experience currently +provides a level of detail that obscures the inner exception message from being read by +new or occasional PowerShell users. +To improve both comprehension and the troubleshooting experience, a single string of text +containing the error will be displayed. A cmdlet will provide the full error details when desired. + +## Motivation + +The on-screen experience, when receiving an error message, +is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the preference variable $ErrorView. +The addition of a “ConciseView” as default that contains only specific error +information producing a single line on screen and in logs will improve customer success. + +Comprehensive error information is available to the customer through +accessing the error object. For new and occasional customers, +a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, improving customers success. + +## Specification + +The proposal is to add a new single-line default error message view called ConciseView +and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. + +__Key Design Considerations__ + +1. To reduce confusion and improve debugging success, +error messages by default should produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". + +- $ErrorView should contain these views + + + NormalView + + CategoryView + + ConciseView + +- Error Message syntax for ConciseView + +```powershell +ERROR: : +ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 +``` + +2. A new cmdlet “Resolve-ErrorRecord” will produce detailed error information similar to Format-List * -Force. + +- Resolve-ErrorRecord will provide the following: + + + Display Last Error ($Error[0]) – default behavior + + Accept Pipeline input – support $error[1] | + + Option for the first X errors in the session + + Option for the Last X errors in the session + +- Resolve-ErrorRecord syntax + +```powershell +Resolve-ErrorRecord [-InputObject ] [-Newest ] [-First ] [-All] [] +``` + +First parameter set + +- Newest + + + Datatype: int32 + + specifies one or more of last errors to display + + Not required + +- First + + + Datatype: Int32 + + Specifies one or more of the first errors that occurred + + Not required + +- All + + + Datatype: Switch + + Specifies display all errors in session + + Not required + +Examples + +```powershell +# Displays details of the last error displayed +Resolve-ErrorRecord + +# Displays error details from pipeline error object +$error[1] | Resolve-ErrorRecord + +# Display detailed error information for the last 5 errors +Resolve-ErrorRecord -Last 5 + +# Display detailed error information for the first 3 errors +Resolve-ErrorRecord -First 3 + +# Display detailed information for all errors that occured in the session +Resolve-ErrorRecord -All +``` +__Example 1__ + +```powershell +PS C:\test> Get-item c:\blah +Get-item : Cannot find path 'C:\blah' because it does not exist. At line:1 char:1 + +PS C:\test> Resolve-ErrorRecord + +PSMessageDetails : +Exception : System.Management.Automation.ItemNotFoundException: Cannot find path 'C:\blah' because it does + not exist. + at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String path, Boolean + allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider + +``` + +__Example 2__ + +```powershell +PS C:\test> slkjdfh +ERROR: The term 'slkjdfh' is not recognized as the name of a cmdlet, function, script file, or operable program. At line:1 char:1 +PS C:\test> $error[0] | Resolve-ErrorRecord + +PSMessageDetails : +Exception : System.Management.Automation.CommandNotFoundException: The term 'slkjdfh' is not recognized as +``` + +## Alternate Proposals and Considerations + +__Alternative single-line display__ + +```powershell +: +get-item: Cannot find path ‘C:\blah’ because it does not exist: + +:: +get-item: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 + +::: +get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 + +ERROR: +ERROR: Cannot find path ‘C:\blah’ because it does not exist + +ERROR:: +ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 + +ERROR:::: +ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 +``` +__Alternative color for all errors__ + +1. We could change the default error message color from the current RED foreground and BLACK background to... \ No newline at end of file From bdd3ee980aac822b0650e3f64bf24da089c1ad32 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 11:58:23 -0700 Subject: [PATCH 02/52] update RFC error view --- 1-Draft/RFC00XX-Update-Error-View.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index f6b92240..3bc13e54 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -154,4 +154,6 @@ ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: A ``` __Alternative color for all errors__ -1. We could change the default error message color from the current RED foreground and BLACK background to... \ No newline at end of file +1. We could change the default error message color from the current RED foreground and BLACK background to... +2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. +For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. From dd58c1119c42b27c64cc4f64d9e0105a6fe7579a Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 13:34:44 -0700 Subject: [PATCH 03/52] Added shorter reference code --- 1-Draft/RFC00XX-Update-Error-View.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 3bc13e54..c020d37d 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -152,8 +152,29 @@ ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char: ERROR:::: ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 ``` + __Alternative color for all errors__ 1. We could change the default error message color from the current RED foreground and BLACK background to... 2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. + +__Alternative For Error, Warning, Verbose__ + +1. We could be more terse in our messages and increase consistency with verbose and warning messages by using a single letter to identify the message. + +Legend: V = Verbose, W = Warning, E = Error(non-terminating future), F = Fatal + +```powershell +V: You are running your code - what could possibly go wrong. + +W: You are about to try something that probably won't work. + +E: Your code broke, but I'm still running. At line:1 char:1 + +E: Your code broke, but I'm still running. At line:1 char:1 + +E: Your code broke, but I'm still running. At line:1 char:1 + +F: Now you really broke me. At line:1 char:1 +``` From d3ed69468a36f424a72ba3a59a3c7a962c41f838 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 14:15:06 -0700 Subject: [PATCH 04/52] update alternate view --- 1-Draft/RFC00XX-Update-Error-View.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index c020d37d..5064bbc0 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -7,7 +7,7 @@ Area: PowerShell Comments Due: --- -# Update $ErrorView with Single Line Error Messages +# Update $ErrorView with Single String Error Messages When an error occurs in PowerShell, the customers on-screen error message experience currently provides a level of detail that obscures the inner exception message from being read by @@ -168,13 +168,14 @@ Legend: V = Verbose, W = Warning, E = Error(non-terminating future), F = Fatal ```powershell V: You are running your code - what could possibly go wrong. -W: You are about to try something that probably won't work. +W: You are about to try something that probably will not work. -E: Your code broke, but I'm still running. At line:1 char:1 +E: Your something broke, but Im still running. At line:1 char:1 -E: Your code broke, but I'm still running. At line:1 char:1 +E: Your something broke, but Im still running. At line:1 char:1 -E: Your code broke, but I'm still running. At line:1 char:1 +E: Your something broke, but Im still running. At line:1 char:1 F: Now you really broke me. At line:1 char:1 + ``` From 5fd9c69a379d315a399d301813ac9376a4383dd8 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 11:53:40 -0700 Subject: [PATCH 05/52] Added RFC Error View --- 1-Draft/RFC00XX-Update-Error-View.md | 157 +++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 1-Draft/RFC00XX-Update-Error-View.md diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md new file mode 100644 index 00000000..f6b92240 --- /dev/null +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -0,0 +1,157 @@ +--- +RFC: Update $ErrorView with Single String Error Messages +Author: Jason Helmick +Status: Draft +Version: 0.0.0 +Area: PowerShell +Comments Due: +--- + +# Update $ErrorView with Single Line Error Messages + +When an error occurs in PowerShell, the customers on-screen error message experience currently +provides a level of detail that obscures the inner exception message from being read by +new or occasional PowerShell users. +To improve both comprehension and the troubleshooting experience, a single string of text +containing the error will be displayed. A cmdlet will provide the full error details when desired. + +## Motivation + +The on-screen experience, when receiving an error message, +is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the preference variable $ErrorView. +The addition of a “ConciseView” as default that contains only specific error +information producing a single line on screen and in logs will improve customer success. + +Comprehensive error information is available to the customer through +accessing the error object. For new and occasional customers, +a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, improving customers success. + +## Specification + +The proposal is to add a new single-line default error message view called ConciseView +and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. + +__Key Design Considerations__ + +1. To reduce confusion and improve debugging success, +error messages by default should produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". + +- $ErrorView should contain these views + + + NormalView + + CategoryView + + ConciseView + +- Error Message syntax for ConciseView + +```powershell +ERROR: : +ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 +``` + +2. A new cmdlet “Resolve-ErrorRecord” will produce detailed error information similar to Format-List * -Force. + +- Resolve-ErrorRecord will provide the following: + + + Display Last Error ($Error[0]) – default behavior + + Accept Pipeline input – support $error[1] | + + Option for the first X errors in the session + + Option for the Last X errors in the session + +- Resolve-ErrorRecord syntax + +```powershell +Resolve-ErrorRecord [-InputObject ] [-Newest ] [-First ] [-All] [] +``` + +First parameter set + +- Newest + + + Datatype: int32 + + specifies one or more of last errors to display + + Not required + +- First + + + Datatype: Int32 + + Specifies one or more of the first errors that occurred + + Not required + +- All + + + Datatype: Switch + + Specifies display all errors in session + + Not required + +Examples + +```powershell +# Displays details of the last error displayed +Resolve-ErrorRecord + +# Displays error details from pipeline error object +$error[1] | Resolve-ErrorRecord + +# Display detailed error information for the last 5 errors +Resolve-ErrorRecord -Last 5 + +# Display detailed error information for the first 3 errors +Resolve-ErrorRecord -First 3 + +# Display detailed information for all errors that occured in the session +Resolve-ErrorRecord -All +``` +__Example 1__ + +```powershell +PS C:\test> Get-item c:\blah +Get-item : Cannot find path 'C:\blah' because it does not exist. At line:1 char:1 + +PS C:\test> Resolve-ErrorRecord + +PSMessageDetails : +Exception : System.Management.Automation.ItemNotFoundException: Cannot find path 'C:\blah' because it does + not exist. + at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String path, Boolean + allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider + +``` + +__Example 2__ + +```powershell +PS C:\test> slkjdfh +ERROR: The term 'slkjdfh' is not recognized as the name of a cmdlet, function, script file, or operable program. At line:1 char:1 +PS C:\test> $error[0] | Resolve-ErrorRecord + +PSMessageDetails : +Exception : System.Management.Automation.CommandNotFoundException: The term 'slkjdfh' is not recognized as +``` + +## Alternate Proposals and Considerations + +__Alternative single-line display__ + +```powershell +: +get-item: Cannot find path ‘C:\blah’ because it does not exist: + +:: +get-item: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 + +::: +get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 + +ERROR: +ERROR: Cannot find path ‘C:\blah’ because it does not exist + +ERROR:: +ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 + +ERROR:::: +ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 +``` +__Alternative color for all errors__ + +1. We could change the default error message color from the current RED foreground and BLACK background to... \ No newline at end of file From 3dd0560dad5f26ab11e8fb52c2fb06f5e747c6f9 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 11:58:23 -0700 Subject: [PATCH 06/52] update RFC error view --- 1-Draft/RFC00XX-Update-Error-View.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index f6b92240..3bc13e54 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -154,4 +154,6 @@ ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: A ``` __Alternative color for all errors__ -1. We could change the default error message color from the current RED foreground and BLACK background to... \ No newline at end of file +1. We could change the default error message color from the current RED foreground and BLACK background to... +2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. +For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. From a7d6a758493940da2c392c5e2bd59e9002401b38 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 13:34:44 -0700 Subject: [PATCH 07/52] Added shorter reference code --- 1-Draft/RFC00XX-Update-Error-View.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 3bc13e54..c020d37d 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -152,8 +152,29 @@ ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char: ERROR:::: ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 ``` + __Alternative color for all errors__ 1. We could change the default error message color from the current RED foreground and BLACK background to... 2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. + +__Alternative For Error, Warning, Verbose__ + +1. We could be more terse in our messages and increase consistency with verbose and warning messages by using a single letter to identify the message. + +Legend: V = Verbose, W = Warning, E = Error(non-terminating future), F = Fatal + +```powershell +V: You are running your code - what could possibly go wrong. + +W: You are about to try something that probably won't work. + +E: Your code broke, but I'm still running. At line:1 char:1 + +E: Your code broke, but I'm still running. At line:1 char:1 + +E: Your code broke, but I'm still running. At line:1 char:1 + +F: Now you really broke me. At line:1 char:1 +``` From 6faa7dc7c51a949d8eaf594bb2f36201ef98b335 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 31 Jul 2019 14:15:06 -0700 Subject: [PATCH 08/52] update alternate view --- 1-Draft/RFC00XX-Update-Error-View.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index c020d37d..5064bbc0 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -7,7 +7,7 @@ Area: PowerShell Comments Due: --- -# Update $ErrorView with Single Line Error Messages +# Update $ErrorView with Single String Error Messages When an error occurs in PowerShell, the customers on-screen error message experience currently provides a level of detail that obscures the inner exception message from being read by @@ -168,13 +168,14 @@ Legend: V = Verbose, W = Warning, E = Error(non-terminating future), F = Fatal ```powershell V: You are running your code - what could possibly go wrong. -W: You are about to try something that probably won't work. +W: You are about to try something that probably will not work. -E: Your code broke, but I'm still running. At line:1 char:1 +E: Your something broke, but Im still running. At line:1 char:1 -E: Your code broke, but I'm still running. At line:1 char:1 +E: Your something broke, but Im still running. At line:1 char:1 -E: Your code broke, but I'm still running. At line:1 char:1 +E: Your something broke, but Im still running. At line:1 char:1 F: Now you really broke me. At line:1 char:1 + ``` From c45436671f135ba13dfafe53d881a1395ddd8d93 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 7 Aug 2019 11:19:39 -0700 Subject: [PATCH 09/52] updated comment due date on Error-View --- 1-Draft/RFC00XX-Update-Error-View.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 5064bbc0..12786951 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -4,7 +4,8 @@ Author: Jason Helmick Status: Draft Version: 0.0.0 Area: PowerShell -Comments Due: +Comments Due: 08/31/2019 +Plan to implement: Yes --- # Update $ErrorView with Single String Error Messages From fb60588b64b9e95e6d8adeda37150f75ef51a95a Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 26 Aug 2019 12:00:45 -0700 Subject: [PATCH 10/52] Update 1-Draft/RFC00XX-Update-Error-View.md Co-Authored-By: Steve Lee --- 1-Draft/RFC00XX-Update-Error-View.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 12786951..53c28b87 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -19,7 +19,7 @@ containing the error will be displayed. A cmdlet will provide the full error de ## Motivation The on-screen experience, when receiving an error message, -is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the preference variable $ErrorView. +is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the existing preference variable `$ErrorView`. The addition of a “ConciseView” as default that contains only specific error information producing a single line on screen and in logs will improve customer success. From f4edfcdcf82e933d3aa77606308bd3ad1d976ed0 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 26 Aug 2019 12:55:09 -0700 Subject: [PATCH 11/52] review update for view name -simpleview --- 1-Draft/RFC00XX-Update-Error-View.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 12786951..4770592e 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -20,7 +20,7 @@ containing the error will be displayed. A cmdlet will provide the full error de The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the preference variable $ErrorView. -The addition of a “ConciseView” as default that contains only specific error +The addition of a “SimpleView” as default that contains only specific error information producing a single line on screen and in logs will improve customer success. Comprehensive error information is available to the customer through @@ -29,21 +29,28 @@ a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed ## Specification -The proposal is to add a new single-line default error message view called ConciseView +The proposal is to add a new single-line default error message view called SimpleView and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. __Key Design Considerations__ 1. To reduce confusion and improve debugging success, -error messages by default should produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". +error messages, by default using WriteErrorLine, should produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "SimpleView". Conditionally, positional information will be added if from a script. - $ErrorView should contain these views + NormalView + CategoryView - + ConciseView + + SimpleView -- Error Message syntax for ConciseView +- From Interactive: Error Message syntax for SimpleView + +```powershell +ERROR: +ERROR: Cannot find path ‘C:\blah’ because it does not exist: +``` + +- From Script: Error Message syntax for SimpleView ```powershell ERROR: : From 0641bb2e82d35cb916ff827b5c35a92b49f5ef8d Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 3 Sep 2019 13:15:31 -0700 Subject: [PATCH 12/52] fix unresolved merge conflict --- 1-Draft/RFC00XX-Update-Error-View.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 605e5f25..d508ca5c 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -19,13 +19,8 @@ containing the error will be displayed. A cmdlet will provide the full error de ## Motivation The on-screen experience, when receiving an error message, -<<<<<<< HEAD -is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the preference variable $ErrorView. +is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the existing preference variable `$ErrorView`. The addition of a “SimpleView” as default that contains only specific error -======= -is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the existing preference variable `$ErrorView`. -The addition of a “ConciseView” as default that contains only specific error ->>>>>>> fb60588b64b9e95e6d8adeda37150f75ef51a95a information producing a single line on screen and in logs will improve customer success. Comprehensive error information is available to the customer through From 8dabf42f0a063f7968f124b5d426a506d513a831 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 3 Sep 2019 13:31:46 -0700 Subject: [PATCH 13/52] Removed incorrect parameter -Oldest --- 1-Draft/RFC00XX-Update-Error-View.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index d508ca5c..389869d4 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -63,13 +63,12 @@ ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char: + Display Last Error ($Error[0]) – default behavior + Accept Pipeline input – support $error[1] | - + Option for the first X errors in the session - + Option for the Last X errors in the session + + Option for the Newest X errors in the session - Resolve-ErrorRecord syntax ```powershell -Resolve-ErrorRecord [-InputObject ] [-Newest ] [-First ] [-All] [] +Resolve-ErrorRecord [-InputObject ] [-Newest ] [-All] [] ``` First parameter set @@ -80,12 +79,6 @@ First parameter set + specifies one or more of last errors to display + Not required -- First - - + Datatype: Int32 - + Specifies one or more of the first errors that occurred - + Not required - - All + Datatype: Switch From 35ed896c1e128e0e451df4abddce99e9768e7d48 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 23 Sep 2019 11:23:08 -0700 Subject: [PATCH 14/52] errorview-removed unneeded parameters --- 1-Draft/RFC00XX-Update-Error-View.md | 47 ++++++++++------------------ 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 5064bbc0..7f8873b1 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -4,7 +4,7 @@ Author: Jason Helmick Status: Draft Version: 0.0.0 Area: PowerShell -Comments Due: +Comments Due: --- # Update $ErrorView with Single String Error Messages @@ -18,13 +18,15 @@ containing the error will be displayed. A cmdlet will provide the full error de ## Motivation The on-screen experience, when receiving an error message, -is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the preference variable $ErrorView. +is controlled through the views NormalView (the default) and CategoryView. These are user selectable +through the preference variable $ErrorView. The addition of a “ConciseView” as default that contains only specific error information producing a single line on screen and in logs will improve customer success. Comprehensive error information is available to the customer through accessing the error object. For new and occasional customers, -a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, improving customers success. +a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, +improving customers success. ## Specification @@ -34,19 +36,21 @@ and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information __Key Design Considerations__ 1. To reduce confusion and improve debugging success, -error messages by default should produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". +error messages by default should produce a single line of text, including the word “ERROR:” +to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". - $ErrorView should contain these views + NormalView + CategoryView + ConciseView + + DetailedView - Error Message syntax for ConciseView ```powershell -ERROR: : -ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 +ERROR: +ERROR: Cannot find path ‘C:\blah’ because it does not exist ``` 2. A new cmdlet “Resolve-ErrorRecord” will produce detailed error information similar to Format-List * -Force. @@ -55,13 +59,12 @@ ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char: + Display Last Error ($Error[0]) – default behavior + Accept Pipeline input – support $error[1] | - + Option for the first X errors in the session - + Option for the Last X errors in the session + + Option for the Newest X errors in the session - Resolve-ErrorRecord syntax ```powershell -Resolve-ErrorRecord [-InputObject ] [-Newest ] [-First ] [-All] [] +Resolve-ErrorRecord [-InputObject ] [-Newest ] [-All] [] ``` First parameter set @@ -72,18 +75,6 @@ First parameter set + specifies one or more of last errors to display + Not required -- First - - + Datatype: Int32 - + Specifies one or more of the first errors that occurred - + Not required - -- All - - + Datatype: Switch - + Specifies display all errors in session - + Not required - Examples ```powershell @@ -93,15 +84,9 @@ Resolve-ErrorRecord # Displays error details from pipeline error object $error[1] | Resolve-ErrorRecord -# Display detailed error information for the last 5 errors -Resolve-ErrorRecord -Last 5 +# Display detailed error information for the most recent 3 errors +Resolve-ErrorRecord -Newest 3 -# Display detailed error information for the first 3 errors -Resolve-ErrorRecord -First 3 - -# Display detailed information for all errors that occured in the session -Resolve-ErrorRecord -All -``` __Example 1__ ```powershell @@ -114,7 +99,7 @@ PSMessageDetails : Exception : System.Management.Automation.ItemNotFoundException: Cannot find path 'C:\blah' because it does not exist. at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String path, Boolean - allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider + allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider ``` @@ -155,7 +140,7 @@ ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: A __Alternative color for all errors__ -1. We could change the default error message color from the current RED foreground and BLACK background to... +1. We could change the default error message color from the current RED foreground and BLACK background to ?. 2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. From 5cf273df899181e7e280892730df328cb1027c16 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 23 Sep 2019 12:10:02 -0700 Subject: [PATCH 15/52] Errorview update to remove unneeded parameters --- 1-Draft/RFC00XX-Update-Error-View.md | 50 ++++++++++------------------ 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 389869d4..7f8873b1 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -4,8 +4,7 @@ Author: Jason Helmick Status: Draft Version: 0.0.0 Area: PowerShell -Comments Due: 08/31/2019 -Plan to implement: Yes +Comments Due: --- # Update $ErrorView with Single String Error Messages @@ -19,42 +18,39 @@ containing the error will be displayed. A cmdlet will provide the full error de ## Motivation The on-screen experience, when receiving an error message, -is controlled through the views NormalView (the default) and CategoryView. These are user selectable though the existing preference variable `$ErrorView`. -The addition of a “SimpleView” as default that contains only specific error +is controlled through the views NormalView (the default) and CategoryView. These are user selectable +through the preference variable $ErrorView. +The addition of a “ConciseView” as default that contains only specific error information producing a single line on screen and in logs will improve customer success. Comprehensive error information is available to the customer through accessing the error object. For new and occasional customers, -a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, improving customers success. +a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, +improving customers success. ## Specification -The proposal is to add a new single-line default error message view called SimpleView +The proposal is to add a new single-line default error message view called ConciseView and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. __Key Design Considerations__ 1. To reduce confusion and improve debugging success, -error messages, by default using WriteErrorLine, should produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "SimpleView". Conditionally, positional information will be added if from a script. +error messages by default should produce a single line of text, including the word “ERROR:” +to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". - $ErrorView should contain these views + NormalView + CategoryView - + SimpleView + + ConciseView + + DetailedView -- From Interactive: Error Message syntax for SimpleView +- Error Message syntax for ConciseView ```powershell ERROR: -ERROR: Cannot find path ‘C:\blah’ because it does not exist: -``` - -- From Script: Error Message syntax for SimpleView - -```powershell -ERROR: : -ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 +ERROR: Cannot find path ‘C:\blah’ because it does not exist ``` 2. A new cmdlet “Resolve-ErrorRecord” will produce detailed error information similar to Format-List * -Force. @@ -79,12 +75,6 @@ First parameter set + specifies one or more of last errors to display + Not required -- All - - + Datatype: Switch - + Specifies display all errors in session - + Not required - Examples ```powershell @@ -94,15 +84,9 @@ Resolve-ErrorRecord # Displays error details from pipeline error object $error[1] | Resolve-ErrorRecord -# Display detailed error information for the last 5 errors -Resolve-ErrorRecord -Last 5 +# Display detailed error information for the most recent 3 errors +Resolve-ErrorRecord -Newest 3 -# Display detailed error information for the first 3 errors -Resolve-ErrorRecord -First 3 - -# Display detailed information for all errors that occured in the session -Resolve-ErrorRecord -All -``` __Example 1__ ```powershell @@ -115,7 +99,7 @@ PSMessageDetails : Exception : System.Management.Automation.ItemNotFoundException: Cannot find path 'C:\blah' because it does not exist. at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String path, Boolean - allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider + allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider ``` @@ -156,7 +140,7 @@ ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: A __Alternative color for all errors__ -1. We could change the default error message color from the current RED foreground and BLACK background to... +1. We could change the default error message color from the current RED foreground and BLACK background to ?. 2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. From 07af6d2033a71a92b055b20d0de769f95b519fc5 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 24 Sep 2019 08:12:58 -0700 Subject: [PATCH 16/52] Changed view name from Concise to SimpleView --- 1-Draft/RFC00XX-Update-Error-View.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 7f8873b1..7197bda3 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -20,7 +20,7 @@ containing the error will be displayed. A cmdlet will provide the full error de The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the preference variable $ErrorView. -The addition of a “ConciseView” as default that contains only specific error +The addition of a “SimpleView” as default that contains only specific error information producing a single line on screen and in logs will improve customer success. Comprehensive error information is available to the customer through @@ -30,23 +30,23 @@ improving customers success. ## Specification -The proposal is to add a new single-line default error message view called ConciseView +The proposal is to add a new single-line default error message view called SimpleView and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. __Key Design Considerations__ 1. To reduce confusion and improve debugging success, error messages by default should produce a single line of text, including the word “ERROR:” -to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". +to make consistent with Verbose and Warning messages. This is added to $errorView as view named "SimpleView". - $ErrorView should contain these views + NormalView + CategoryView - + ConciseView + + SimpleView + DetailedView -- Error Message syntax for ConciseView +- Error Message syntax for SimpleView ```powershell ERROR: From da03165715a555e22127c9f56eb562b1bd7670e2 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 24 Sep 2019 08:23:44 -0700 Subject: [PATCH 17/52] Added WriteErrorLine clarification --- 1-Draft/RFC00XX-Update-Error-View.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 7197bda3..90512c05 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -36,7 +36,7 @@ and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information __Key Design Considerations__ 1. To reduce confusion and improve debugging success, -error messages by default should produce a single line of text, including the word “ERROR:” +error messages should call WriteErrorLine to produce a single line of text, including the word “ERROR:” to make consistent with Verbose and Warning messages. This is added to $errorView as view named "SimpleView". - $ErrorView should contain these views From 8cdd56a02732109fd159adcf9336fefb444f36c0 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 24 Sep 2019 10:31:25 -0700 Subject: [PATCH 18/52] Added example showing Inner exception --- 1-Draft/RFC00XX-Update-Error-View.md | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 90512c05..b81d3460 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -75,7 +75,7 @@ First parameter set + specifies one or more of last errors to display + Not required -Examples +__Example__ ```powershell # Displays details of the last error displayed @@ -86,12 +86,14 @@ $error[1] | Resolve-ErrorRecord # Display detailed error information for the most recent 3 errors Resolve-ErrorRecord -Newest 3 +``` __Example 1__ +SimpleView of Error message. Resolve-ErrorRecord shows sample DetailedView ```powershell PS C:\test> Get-item c:\blah -Get-item : Cannot find path 'C:\blah' because it does not exist. At line:1 char:1 +ERROR: Cannot find path 'C:\blah' because it does not exist. PS C:\test> Resolve-ErrorRecord @@ -104,14 +106,29 @@ Exception : System.Management.Automation.ItemNotFoundException: Cann ``` __Example 2__ +SimpleView of Error message. Piped error to Resolve-ErrorRecord shows sample DetailedView ```powershell PS C:\test> slkjdfh -ERROR: The term 'slkjdfh' is not recognized as the name of a cmdlet, function, script file, or operable program. At line:1 char:1 +ERROR: The term 'slkjdfh' is not recognized as the name of a cmdlet, function, script file, or operable program. PS C:\test> $error[0] | Resolve-ErrorRecord PSMessageDetails : -Exception : System.Management.Automation.CommandNotFoundException: The term 'slkjdfh' is not recognized as +Exception : System.Management.Automation.CommandNotFoundException: + The term 'slkjdfh' is not recognized as +``` + +__Example 3__ +SimpleView of Inner exception if present. Sample of Resolve-ErrorRecord to provide DetailedView. + +```powershell +PS> [System.Net.DNS]::GetHostByName('NoOnline') +ERROR: No such host is known. + +PS>Resolve-ErrorRecord -Newest 1 +Exception calling "GetHostByName" with "1" argument(s): +"No such host is known." +At line:1 char:1 ``` ## Alternate Proposals and Considerations From 6de0c3edc89df3eba276cdcbfad1e388f3bdd103 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 24 Sep 2019 15:41:46 -0700 Subject: [PATCH 19/52] updated normal and detailed view --- 1-Draft/RFC00XX-Update-Error-View.md | 112 +++++++++++++-------------- 1 file changed, 54 insertions(+), 58 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index b81d3460..2d7f2d28 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -10,50 +10,61 @@ Comments Due: # Update $ErrorView with Single String Error Messages When an error occurs in PowerShell, the customers on-screen error message experience currently -provides a level of detail that obscures the inner exception message from being read by +provides a level of detail that obscures the exception message from being recognized and read by new or occasional PowerShell users. -To improve both comprehension and the troubleshooting experience, a single string of text -containing the error will be displayed. A cmdlet will provide the full error details when desired. +To improve both comprehension and the troubleshooting experience, +a simplified conditional error message will be provided determined by +Interactive or Script use. A cmdlet will provide the full error details when desired. ## Motivation The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the preference variable $ErrorView. -The addition of a “SimpleView” as default that contains only specific error -information producing a single line on screen and in logs will improve customer success. - -Comprehensive error information is available to the customer through -accessing the error object. For new and occasional customers, -a cmdlet “Resolve-ErrorRecord” will simplify the process of getting detailed error information, -improving customers success. +This RFC describes changing the NormalView to a simplified conditional error message. The +CategoryView should remain unchanged. +A comprehensive detailed view of the fully qualified error, including inner exceptions, +will be provided by the `Resolve-ErrorRecord` cmdlet. ## Specification -The proposal is to add a new single-line default error message view called SimpleView -and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. +The proposal is to modify NormalView to a simplified conditional error message +based on interactive versus script use. +For in-depth troubleshooting, a new cmdlet `Resolve-ErrorRecord` to provide detailed error information. __Key Design Considerations__ 1. To reduce confusion and improve debugging success, -error messages should call WriteErrorLine to produce a single line of text, including the word “ERROR:” -to make consistent with Verbose and Warning messages. This is added to $errorView as view named "SimpleView". +error messages should call WriteErrorLine to produce a simplified message, including the word “ERROR:” +to make consistent with Verbose and Warning messages. This is a change to the existing NormalView. -- $ErrorView should contain these views +- $ErrorView can refer to these views + NormalView + CategoryView - + SimpleView - + DetailedView -- Error Message syntax for SimpleView +- Simplified error message syntax from Interactive. ```powershell -ERROR: -ERROR: Cannot find path ‘C:\blah’ because it does not exist +PS C:\> Get-Childitem -Path c:\notreal +ERROR: Cannot find path ‘C:\notreal’ because it does not exist ``` -2. A new cmdlet “Resolve-ErrorRecord” will produce detailed error information similar to Format-List * -Force. +- Simplified error message from Script. (note-colorization is not displayed correctly) + +```powershell +PS C:\> .\MyScript.ps1 +ERROR: Cannot find path 'C:\notreal' because it does not exist. + ---> C:\GitHub\pri-errorview\RustTest\test.ps1 + | +15 | Get-ChildItem -Path c:\notreal + | ^^^ Cannot find path 'C:\notreal' because it does not exist. + | + * Help: this is for additonal help information +``` + +2. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed +view of the fully qualified error, including inner exceptions. - Resolve-ErrorRecord will provide the following: @@ -75,60 +86,45 @@ First parameter set + specifies one or more of last errors to display + Not required -__Example__ - -```powershell -# Displays details of the last error displayed -Resolve-ErrorRecord - -# Displays error details from pipeline error object -$error[1] | Resolve-ErrorRecord - -# Display detailed error information for the most recent 3 errors -Resolve-ErrorRecord -Newest 3 -``` - __Example 1__ -SimpleView of Error message. Resolve-ErrorRecord shows sample DetailedView +Error occurs in Interactive mode. Cmdlet displays details of the last error displayed ```powershell -PS C:\test> Get-item c:\blah -ERROR: Cannot find path 'C:\blah' because it does not exist. +PS C:\> Get-Childitem -Path c:\notreal +ERROR: Cannot find path ‘C:\notreal’ because it does not exist PS C:\test> Resolve-ErrorRecord -PSMessageDetails : -Exception : System.Management.Automation.ItemNotFoundException: Cannot find path 'C:\blah' because it does - not exist. - at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String path, Boolean - allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider - +**** Detailed message here **** ``` __Example 2__ -SimpleView of Error message. Piped error to Resolve-ErrorRecord shows sample DetailedView +Error occurs in Script. Cmdlet displays error details from pipeline error object ```powershell -PS C:\test> slkjdfh -ERROR: The term 'slkjdfh' is not recognized as the name of a cmdlet, function, script file, or operable program. -PS C:\test> $error[0] | Resolve-ErrorRecord - -PSMessageDetails : -Exception : System.Management.Automation.CommandNotFoundException: - The term 'slkjdfh' is not recognized as +PS C:\> .\MyScript.ps1 +ERROR: Cannot find path 'C:\notreal' because it does not exist. + ---> C:\GitHub\pri-errorview\RustTest\test.ps1 + | +15 | Get-ChildItem -Path c:\notreal + | ^^^ Cannot find path 'C:\notreal' because it does not exist. + | + * Help: this is for additonal help information + +PS C:\> $error[0] | Resolve-ErrorRecord + +**** Detailed message here **** ``` __Example 3__ -SimpleView of Inner exception if present. Sample of Resolve-ErrorRecord to provide DetailedView. +Display detailed error information for the most recent 3 errors. ```powershell -PS> [System.Net.DNS]::GetHostByName('NoOnline') -ERROR: No such host is known. +PS C:\> Resolve-ErrorRecord -Newest 3 -PS>Resolve-ErrorRecord -Newest 1 -Exception calling "GetHostByName" with "1" argument(s): -"No such host is known." -At line:1 char:1 +**** Detailed message here **** +**** Detailed message here **** +**** Detailed message here **** ``` ## Alternate Proposals and Considerations From 697327cbb4cab36bffd5a174949b0cdfc62b1cb0 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 25 Sep 2019 08:25:25 -0700 Subject: [PATCH 20/52] added image of new error view --- 1-Draft/RFC00XX-Update-Error-View.png | Bin 0 -> 38646 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 1-Draft/RFC00XX-Update-Error-View.png diff --git a/1-Draft/RFC00XX-Update-Error-View.png b/1-Draft/RFC00XX-Update-Error-View.png new file mode 100644 index 0000000000000000000000000000000000000000..a769d8d104a4fa2ff312b348eb4423620eccdc6d GIT binary patch literal 38646 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

^}tGV);`sP8r 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 Date: Wed, 25 Sep 2019 08:33:36 -0700 Subject: [PATCH 21/52] Added image of errorview and adjusted carets --- 1-Draft/RFC00XX-Update-Error-View.md | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 2d7f2d28..a40d9454 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -43,25 +43,9 @@ to make consistent with Verbose and Warning messages. This is a change to the ex + NormalView + CategoryView -- Simplified error message syntax from Interactive. +- Simplified error message syntax from Interactive and script. -```powershell -PS C:\> Get-Childitem -Path c:\notreal -ERROR: Cannot find path ‘C:\notreal’ because it does not exist -``` - -- Simplified error message from Script. (note-colorization is not displayed correctly) - -```powershell -PS C:\> .\MyScript.ps1 -ERROR: Cannot find path 'C:\notreal' because it does not exist. - ---> C:\GitHub\pri-errorview\RustTest\test.ps1 - | -15 | Get-ChildItem -Path c:\notreal - | ^^^ Cannot find path 'C:\notreal' because it does not exist. - | - * Help: this is for additonal help information -``` +![test](.\RFC00XX-Update-Error-View.png) 2. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed view of the fully qualified error, including inner exceptions. From 889cad43c13dd224baeb54364b393f2a57950084 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 25 Sep 2019 08:38:51 -0700 Subject: [PATCH 22/52] Spelling correction --- 1-Draft/RFC00XX-Update-Error-View.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index a40d9454..c6679072 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -91,9 +91,9 @@ ERROR: Cannot find path 'C:\notreal' because it does not exist. ---> C:\GitHub\pri-errorview\RustTest\test.ps1 | 15 | Get-ChildItem -Path c:\notreal - | ^^^ Cannot find path 'C:\notreal' because it does not exist. + | ^^^ Cannot find path 'C:\notreal' because it does not exist. | - * Help: this is for additonal help information + * Help: this is for additional help information PS C:\> $error[0] | Resolve-ErrorRecord From 9439d35c084a64ad32980c3aa706a431459a1833 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 25 Sep 2019 11:55:55 -0700 Subject: [PATCH 23/52] Updated graphic display of error messages --- 1-Draft/RFC00XX-Update-Error-View.md | 22 +++++++++++++++++++++- 1-Draft/RFC00XX-Update-Error-View.png | Bin 38646 -> 37079 bytes 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index c6679072..699e48ba 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -43,7 +43,27 @@ to make consistent with Verbose and Warning messages. This is a change to the ex + NormalView + CategoryView -- Simplified error message syntax from Interactive and script. +- Simplified error message syntax from Interactive and script. (See graphic below) + +```powershell +PS C:\> Get-Childitem -Path c:\notreal +ERROR: Cannot find path ‘C:\notreal’ because it does not exist +``` + +```powershell +PS C:\> .\MyScript.ps1 +ERROR: ItemNotFoundException + ---> C:\GitHub\pri-errorview\RustTest\test.ps1 + | +15 | Get-ChildItem -Path c:\notreal + | ^^^ Cannot find path 'C:\notreal' because it does not exist. + | + * Help: this is for additional help information + +PS C:\> $error[0] | Resolve-ErrorRecord + +**** Detailed message here **** +``` ![test](.\RFC00XX-Update-Error-View.png) diff --git a/1-Draft/RFC00XX-Update-Error-View.png b/1-Draft/RFC00XX-Update-Error-View.png index a769d8d104a4fa2ff312b348eb4423620eccdc6d..e837c89f19c868e919db4b0dfdb5d8d0cf28891e 100644 GIT binary patch literal 37079 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

^}tGV);`sP8r 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 Date: Wed, 25 Sep 2019 12:08:10 -0700 Subject: [PATCH 24/52] graphic update --- 1-Draft/RFC00XX-Update-Error-View.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 699e48ba..daaca38d 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -107,7 +107,7 @@ Error occurs in Script. Cmdlet displays error details from pipeline error object ```powershell PS C:\> .\MyScript.ps1 -ERROR: Cannot find path 'C:\notreal' because it does not exist. +ERROR: ItemNotFoundException ---> C:\GitHub\pri-errorview\RustTest\test.ps1 | 15 | Get-ChildItem -Path c:\notreal From 1f272cd53de418ff185e39b8e289e7aa264e0f3c Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 25 Sep 2019 14:38:45 -0700 Subject: [PATCH 25/52] edits to Overview --- 1-Draft/RFC00XX-Update-Error-View.md | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index daaca38d..92091c19 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -11,24 +11,33 @@ Comments Due: When an error occurs in PowerShell, the customers on-screen error message experience currently provides a level of detail that obscures the exception message from being recognized and read by -new or occasional PowerShell users. -To improve both comprehension and the troubleshooting experience, -a simplified conditional error message will be provided determined by -Interactive or Script use. A cmdlet will provide the full error details when desired. +new or occasional PowerShell users. The addition of simplified error views will improve both +comprehension and troubleshooting experience. + +Advanced PowerShell users and scripters will benefit from a newly designed 'AnalyticalView' that +focuses on the specific location, code reference and error information from the script. + +Both user types will benefit from a combined 'DynamicView' that switches between +'MessageView' and 'AnalyticalView' based on the source of execution; +Command-line versus script. + +In all the above scenarios, regardless of error view selected, A comprehensive +detailed view of the fully qualified error, including inner exceptions, +will be provided by the `Resolve-ErrorRecord` cmdlet. ## Motivation The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the preference variable $ErrorView. -This RFC describes changing the NormalView to a simplified conditional error message. The -CategoryView should remain unchanged. +This RFC describes adding three additional views to improve readability. The +'MessageView', 'AnalyticalView', and 'DynamicView'. A comprehensive detailed view of the fully qualified error, including inner exceptions, will be provided by the `Resolve-ErrorRecord` cmdlet. ## Specification -The proposal is to modify NormalView to a simplified conditional error message +The proposal is to add three new views to a simplified conditional error message based on interactive versus script use. For in-depth troubleshooting, a new cmdlet `Resolve-ErrorRecord` to provide detailed error information. @@ -42,6 +51,9 @@ to make consistent with Verbose and Warning messages. This is a change to the ex + NormalView + CategoryView + + MessageView + + AnalyticalView + + DynamicView - Simplified error message syntax from Interactive and script. (See graphic below) From a58d4e8e09dc1fd49450373a46fa709c0b170464 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 26 Sep 2019 10:43:43 -0700 Subject: [PATCH 26/52] update $errorview to enum --- 1-Draft/RFC00XX-Update-Error-View.md | 88 ++++++++++++++------------ 1-Draft/RFC00XX-Update-Error-View.png | Bin 37079 -> 40639 bytes 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 92091c19..52918b63 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -1,67 +1,67 @@ --- -RFC: Update $ErrorView with Single String Error Messages +RFC: Update $ErrorView with simplified views for Error Messages Author: Jason Helmick Status: Draft Version: 0.0.0 Area: PowerShell -Comments Due: +Comments Due: 10/31/2019 --- -# Update $ErrorView with Single String Error Messages +# Update $ErrorView with simplified views for Error Messages When an error occurs in PowerShell, the customers on-screen error message experience currently provides a level of detail that obscures the exception message from being recognized and read by -new or occasional PowerShell users. The addition of simplified error views will improve both -comprehension and troubleshooting experience. - -Advanced PowerShell users and scripters will benefit from a newly designed 'AnalyticalView' that -focuses on the specific location, code reference and error information from the script. - -Both user types will benefit from a combined 'DynamicView' that switches between -'MessageView' and 'AnalyticalView' based on the source of execution; -Command-line versus script. - -In all the above scenarios, regardless of error view selected, A comprehensive -detailed view of the fully qualified error, including inner exceptions, -will be provided by the `Resolve-ErrorRecord` cmdlet. +new or occasional PowerShell users. The addition of a simplified error view will improve both +comprehension and troubleshooting experience. A new cmdlet 'Resolve-ErrorRecord' will provide +complete detailed view of the fully qualified error when desired. ## Motivation The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the preference variable $ErrorView. -This RFC describes adding three additional views to improve readability. The -'MessageView', 'AnalyticalView', and 'DynamicView'. +This RFC describes Changing '$ErrorView to an enumeration and adding three additional views +to improve readability,'Message', 'Analytic', and 'Dynamic'. + +- Message - provides a concise error message suitable for new or occasional PowerShell users. +- Analytic - provides a refactored form of NormalView +- Dynamic - provides conditional switching between Message and Analytic. + A comprehensive detailed view of the fully qualified error, including inner exceptions, will be provided by the `Resolve-ErrorRecord` cmdlet. -## Specification +'$ErrorView' shall contain the original views for backward compatibility and renamed +to remove 'view' from the name. The view list is as follows: -The proposal is to add three new views to a simplified conditional error message -based on interactive versus script use. -For in-depth troubleshooting, a new cmdlet `Resolve-ErrorRecord` to provide detailed error information. +- Normal +- Category +- Message +- Analytic +- Dynamic -__Key Design Considerations__ +## Specification -1. To reduce confusion and improve debugging success, -error messages should call WriteErrorLine to produce a simplified message, including the word “ERROR:” -to make consistent with Verbose and Warning messages. This is a change to the existing NormalView. +The proposal is to add three new views to help improve error message comprehension based on user +needs. For in-depth troubleshooting, a new cmdlet `Resolve-ErrorRecord` +to provide detailed error information. -- $ErrorView can refer to these views +__Key Design Considerations__ - + NormalView - + CategoryView - + MessageView - + AnalyticalView - + DynamicView +1. To reduce confusion and improve debugging success for new and occasional users, +error messages should call WriteErrorLine to produce a simplified message using view 'Message' +and include the preface word “ERROR:” -- Simplified error message syntax from Interactive and script. (See graphic below) +- Simplified error message syntax from 'Message'. (See graphic below) ```powershell PS C:\> Get-Childitem -Path c:\notreal ERROR: Cannot find path ‘C:\notreal’ because it does not exist ``` +2. To improve script debugging for advanced PowerShell users and scripters, +a refactored error view 'Analytic' will be added displaying the error category, +exception, code line and position, and include additional help for the user. + ```powershell PS C:\> .\MyScript.ps1 ERROR: ItemNotFoundException @@ -70,17 +70,20 @@ ERROR: ItemNotFoundException 15 | Get-ChildItem -Path c:\notreal | ^^^ Cannot find path 'C:\notreal' because it does not exist. | - * Help: this is for additional help information + * Help: Additional help information provided here +``` -PS C:\> $error[0] | Resolve-ErrorRecord +3. The 'Dynamic' view is a combination of the views 'message' and 'Analytic' for users working +in the console that also run scripts. When the user is working Interactively in the CLI, +they will receive errors in the view of 'Message'. When the user executes a script, +errors will use the view 'Analytic'. -**** Detailed message here **** -``` +- An example is in the image below: -![test](.\RFC00XX-Update-Error-View.png) +![Message and Analytic](.\RFC00XX-Update-Error-View.png) -2. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed -view of the fully qualified error, including inner exceptions. +4. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed +view of the fully qualified error, including nested inner exceptions. - Resolve-ErrorRecord will provide the following: @@ -99,7 +102,7 @@ First parameter set - Newest + Datatype: int32 - + specifies one or more of last errors to display + + specifies one or more of the newest errors to display + Not required __Example 1__ @@ -115,7 +118,8 @@ PS C:\test> Resolve-ErrorRecord ``` __Example 2__ -Error occurs in Script. Cmdlet displays error details from pipeline error object +Error occurs in script, shows error from view 'Analytic', and then is piped +from $error array to 'Resolve-ErrorRecord' to display more details. ```powershell PS C:\> .\MyScript.ps1 diff --git a/1-Draft/RFC00XX-Update-Error-View.png b/1-Draft/RFC00XX-Update-Error-View.png index e837c89f19c868e919db4b0dfdb5d8d0cf28891e..48ba682ac577e178bc6b479f1dc36d8d47795d6a 100644 GIT binary patch literal 40639 zcmeFZWl)^Yx9>ZIV8J1{TW|^PlVorY?iSpGOR!)8f?MzmFi3C@7Cg8O?h@RS;FkN4 zY%XKn5nVr4|!4x;B{SW7qqJe%`*KJ_qODN=^^Y&x`%tGCfLbr+ccW{6>C)uf+<^ zzaRn+47@53jRWot1A&Yg+dzMQ*`^eLfc*P+0hu5~jNexv5d>u7KUeM#Fu49)?LQk+JFpV#B%Ihv1OT%NZDB0}!N3)J?$4dnPV z42z<%WpFH4I?Nr!;T$_Ga@5?yL$X_!&>4oE?Q_`B7+YNa#hWRFTLiBXD}`AN?y-;0 zsDvR&u+8ASg;l<)us)w1D$^nIIB6`|=%Rz@gyD!11gb_sY%bMzYDc=FXzY?CGT`M! za_Y;1K^;UI)*@I#&G!%bc0*N}s_Ag|>{C+=y?40Mk+w2DvVN_iKkfVRRlLTKT9aK+ z0JV8nqnz{suZ1aR^Kl1saVbkG-UAyHFdKxhBnKE4w|ebDa`{EP2ARoadlb6bwSSQ5 zGAxv0VBR_U-~lPVoUNs(_F z>oa`)0^e5Ph(yn){ z9fZ$+{@L{d)6uhYw3j;6zA$v0T-4L)UGy~%()A&uz&paj-WFgO4HyU1$1}N*$|2;x zqVkXt7EF9=LWIG!4?eTMd5g}0lbvrAIY6PC(YM+eRvT#SZ%u`m;k?#`R#^@S=s&VM z`?8d1ALxw6d`tl z*cFJIN7Z2FX<}s>P!MX$uD%q*cY)H$eX2>2w`Bq*q^fNJ0xy)v#|J(?+Us<=kz!k_ zz2VV%y?9l-Lbh_n{^3eobGGE}r0o1)n9?)+K*c6DumhW-i(Pq6q&pjkQde|jPu9xR z1g^y7xRMuoS%8aw{K!vtcm$@HR&I&rM+N++;>>s5>DEWX(YT$%>sx-rL))mbkeJ80 zs(VSR&mok2Yrr{#Udtl6u!v-NSIg*?TKfiGdV=pvCpksDA)GX1R?X40&wZ_eL;I7>}=2}}|{xPzZAil8NG_K}CufyL3_VF*rEeU;~>yNBC7-XUuG}?u<>3FP>Y-@VN@PZuY!on2saf80b-cXPbjIa@P7$HFL~%Ez1b z8Qo7kMUZPv;RT$W#y|)~1GTtUYS7{m{tO)vZdW)zkKW4C&=0tvFAvM4P^Ru<%^(~> zd&8J1!C^A77bI`iF*Ofk7Fcvm&_u(t?*S>#z3u<3!N0eAp!B8gh-Sy}=NuxNgBKG! z6&}>@fxE$24En*6BpLfHHi3_iGwOY`|FNF{k^J(}Ei!oSnG8=7uVM|DvwVjq(goUG z6fbJGZ5x=`Ku^9_ZuVgHb%b$&{ZFz!IR>4$uZ^lA2mKafx_K~TOAe#RKoZ^TOLfJ3 zmehnAD#L6k)j_AeJeZ`}uaD6=Uc2Jik0R9w>>UV2BC07mwa~6W`tP!SYUjz#qb9hw z$JnTgcpE=tq$65y$*~}qeK)Hh=DS8=0pr(0*Aj|F5J~M_M1yqa{DN8)U0148+D9;u zW0>rgrs0toGglVJ-qohkexG(u&HBvN#P{-@XA`>2fy(PmQ6$?KzC4KJWi09`e#J=k zflmld>C5PL;7<_ioi|KKpa8e~yhw|ffp^nE+X?o&bk^as19KZp3-3ea0;($_Q_ z@e^HsZK|q)v9j;abZA>tIO5c0^;0v0Xj4=3Na0Y$YP(%(KWiof1!@Il3rakq^yH9^ zZRN4vhx=-8`z?Od4(i0yUsKC0ygjAoFUAVbKcP|x@x6F8zE&h38LLL$GJBBlijLu} zdo8%YG--(4M7omM&e}EH>D>qFgy}Qucl7PP;?Fh($O;bMQcV`2e2wPlJvo_?X}Al3 z7*3VYl0BVWhFYycI^Yi*+zYu@b-zDD-Z$%jKEfbCN8x^~u^h7}Ox%&D#~1m~->MNc zC9zjMY}zu*C0zTni0d34p)d0cj^g6)&`J097Pxh{{Kl*SL$p(Vt0GLF@PxYd43oWt zgN4XUuoTbiGc*z0j|8faPc?6L;Z-wAc7-9nf&{D%4rn3~nRPskicO`}cy{kpwRqf!a)k0; z4yg)rxu0zJ7`{EFxnq&TtsePV>K0cSs*3-$2+Cx_sAe4ymQ#6MSu<#*))5g5Z~x$0 zY$1zT(Xv3w?{nvNB!}#|ONdc!dF5`|glCuJTOW>PwiBz6`OMRbGg#o6Z8L!v(Ig8^ zv!xW+@c}5{^eqrFQkWIDb?h@o+wm@W%R16zGomwh?+p4ZUgi2GR}jsuKdYF9oUnC# z?bXH_hHt2$c}Y>+!-1j#t4enKN^Qt`y{-rf== z3%*2-nUf-IUl;kAm-{U%?>R6CBKKXGbd4d24kr@^#8EbcK1pI+rZS=M1w!o`jYL`t zfwAOy1u@Y@-GRWza*-OL5j@H-Hg2_b^V!QqiGhT{R)j#f&yO_y*j-0>I(~nM;nn8T1Bix#yj$`9ZsXOp@e-q6Q%aT@k}(Y^))b+*giyTPLe>@hR3~&jc0)!Z3m7a zLl)mcdt+PP)QsQ_hg8)-JM!Mk_0h?CKTT{5u2F!eK(~3}^I_sAP$t<=cKI?;Ho17A z)N0ex+#%Eh2%=62;oKIOhLJFzgFRBh(`t)!1?XFOJBM&M(_KVp1QKNIfwfTLX34jE zGe4>L8}Iiphvhr~`n9?$`z=;#BYVx1IXjAKMS?6DHi2bUa6izo3jS)p-`b_eCqD(6 zZ+d1hN;Jsm7(|m;fgx!b`mVldyG`4c)bEWkB+bENhYRT2GXwb?D8m_Ujkt2%xBlrl zUOQ@H?FrSE_=g(G_&6qxRA3MWc^ z*Wy)YBaR@P!3p6t&@m;t5kfsh`ARxARv}o7lcA$?oUAG5>rgJq>pZSCG(A!&ngnb%26hYecEVlR>$=Oe4Zu}H4yU-+*MWxbbYf88LS+w%qe&Clddqhw`T{H65Js2 zG$IjN61?SMC2=SeycJ31X7FVW3Uw>pd-lkk+qqB0I}J+ff%jxF#y#~eA4p`OIn4Do z;qeG{(OM;OC;3JLFG2~C5Svd32d@u?hjpl+C`K#>lD3b3+bYxNG-S%!sh6Sf%m$+E zdLDG?-CAqH*wpmL;{y zC}iyqjp%pe`IN-g{D}^m9swcSLe=lNo0)#?=5sw}??(8U-7Yw9z^6>BP7^1^EE4m);`=re* z;t1S6SG_Q92p(86=a&GMzi66rY99%%9RoUJ29eUknE827TWk6L+N63h!0=+|RqA7% zBPU;ngTR{9b*Ij~^{^}VD4NB}gX$v7u3dTj-)3MQdnBXEZJtX?*6BlXp1%3$;Ho zs5#zS#rBZVI_?bOHVZ2Mf;9UXmN(Ss+mxW!c2_toZafmLCyX(mNR7d6)XT9qeT6c4 zfKY*Qjc)1pi5vu)!n$9_E(;>{5do7Vv2F~^qr(cZuQY78Tfq66V$N?X*^ZBX0Z6z` z9Eon21e26~Pi*3Q=IK@AYJ1;Z)hZambD4fsG~_?wNE)&WWpv<@*o>2=to*`Y77Sli zsd<<8`SGG0O}e9^t}a@W@5^sv6#7R+vF2C=nIy(d)kFraadz2{DaGGt+X6E$PgoI( zR7K3}!7G8(udv8pc`SAjt&hOmXLA7p;h>MzUHzfjp`XS3JTArQn`t?vf(V0rNdAnOIjacee2lz5-wT!9WFM3!2QwH zud@Dd8t6C+2sA?utWUcvlo<9$R&Gy}i0!Gv-}-)JltHEzO1%xv!ogEC`JIR3$?ol! zwct>rU?J3L(r1$WkoVz7$epKn4R)r?NnR9ns*!f?8)zN0D%CjXNf{*h$v3IE#DUsM z~b=sDvhl7jtzV(s6W*nUc zaQ~_GlruGfZK_;w+3ryfALV=5dSH6`1iMvfY)gYMcw2GWlC#ABRB1(O`swa5`sR^v ztV50J?~ZRdTDQY?YXGxrrV)TZCAb*JnzU#=$BR|(Zc9fNzy$ z{vMk_uO1>0=pZg_gSDrvXTOVp}| z{=oW!O(HqBHlpiIp`J=BdhW|oFc(4*CL<#?1NYRZX<&6knhxe9I=yBb1A2)kHKH?X zh$7Lt?X8L2hwu_fy+_XJ6ASk%$$`aBxM%7En^>@d%2p$sMXa}r(I+0QUQP07V1bvz z;9qZ2+f+QB+?i;bJ{Xfe@0P?S=!=16=pcaFNZUb2kAB$eeL0e&1j9O#0S1UinQ) zoixJy>LfGU-k^AJl_^z{3|urZEBr*Wy5=!jehoH$_5RNy?bj~su$MOkvPoRcg7}#M zYYGq>X%7?LPe~|GUX;g=GifCWduTotE_Ny%|4PfAA`(m3prWMCtC1Rzh|P(iD(DR^ z+b}NiEJo(dbM8C7QgD@n&7n}eQL))rUUkE=R;fl(twneAAbo1i#KPsxi3EnM@TnMrfdKkQKx`af`1$z6 zKc1%fz}^vkgo^Ub@$+kvZ^xAyAgc%UySq3L5XcG%nfN178Sk$lsqmj8VDOtyIH0t) z(njGf91uu15CM4`_1fn(^Sv$7+X<(hMOM) z<;_3joSz4jt!Nrhn4*F}*VzA|y0~I^(MlwWaxZ>?^rGp{Aj#O7fe42WYQKz#U+?!N zFlPH*?NHsVQc>Pv0G|T9>=?m6=)l~0*Q1!kD`)Sn#oTriFO~|jym$K;v)|l&?+Fw6 zBW>1^P$HcpBY%E+wST_em(UYU;d3%3P364}rIU`vs7L?vX*|R$OKl(lDTi>&Y~Qns z@88z^y04ZzmVE&gj?{tZ_f0bvS%B`Ap0uqgVSjnKO?zziX-R~_i*K~D>{}rsd_f=yZmqY6Kr)) z*c#WhzWhjntNPS!_9!VZ%_8@xONgOD{R@8fYox55HBPr20^_0e7`^plExg+OGsoTr z`72*$d_ljP3sb`p9&78nXmwLY97T=M&+M;>WRmnx5y8iZH2Y%|FXzV7FeeQXh(o`Q zwW!QFbcZ(}-A5n~viU-ls^W0tRIUe zSSzfubE!>Oi=fnz86{goxGa=dh$e4Fz$<=Aslhxc)t)i;`|;dY;R+-1gu-MmmEE`D zqHYUTlfw*2BC50^`dx63=k5-qTl*2osEJ}_QyUgdESdI^Hi@q> z%@Vz?5|Sp&8MWT?<$Nk{+3{5+vUYi`d^I60^+1fm+aq$hiC~7gxcxW53>Z#xNy#PM zpzGJ;A+}*Afpt!jIUoDvw?xgf4(=TxClMo+lIuz&=rZ6vY{kuoEZFq?&Ko0|xqF+n?OW!_}5l#@QbrZ)LH6uG62z=T?>x zBdJN@g+_*Q>0L9jflw#~!95ls)y7Uq%{U zfFBU%i2V?lSpHbZDsMiRly(7FV~6{vYb_!%D%MNRjy^wPXibz%Fy7;Vb#BKjKT5lk za_42pEKtf{3e)DLsHd2_<2#}{Xn?OuzYk^5EmGpkeD6pmSIfP{RrBU{%l~f6=w^** z53^#WWG-9}g2*OguU(79A}^z5psTwPEhvLsw{;?=eZ_ISmA@F8WI-g@2!&xf*Xb3$ zZ&=9&3Y`I^kS~aThvb3x19EOHbKd95V-rSwSb5A%zxL(dIlr!rOVVr(&P+E}^U9o5 zsiYQ3PDANNdliA7Y$aWl{DgKt(x^BX3L9a1&zFKe{7L?G^*j+F@xcy@#Pi6C>iCUq z|8DhGD3C1Hs0a>Rb`7ZC4-Xw$GfTi4q8wDLn{q$d4YFdB0fn+Dn&n}xHUnUSQgB4} z)Ke+u-^Br0V0ZwP&S$^=HB}wMx9M_gMY$f%sD8em?uAkQ&(DVygu}vnY(k>v8Jk0n zem_-SH}1M*UoR9J-R?rIm}{~+kP1i#CyVDr$enLls+b=$e;R()lyL(#JyBUSql7%w$$2N&YYt?Bs(Q5F5^HrVxC zp#8s#sC;F_H#^5HQlh(RK0f~T-%lgY&cth-K0zyuip73y9@|tjxl{l8F&T$3Z*dUc z-n=DtG*&)eo zVEDbpj#ov@Y=n5_*33X88sRYbAX5m$hWRIB%;F+u9B7gScaS2MP~}9wKVjmNy&N#Q z`!Vm(qzL!!esUh4CSUafp7KTAUD`Gm`*Sq^=!9Bv@aSbXk&)=*%szES74A0JYeY3m zjtR!m+{_eHLwv$hc}}0%0W-^5cY{=4Sjc#9VwHBLVO>~M79rYB0r=Kh2o3t$mCJ5x zC-wE=gMlZ08Ho;s_{sa$^$E&BN6Ra9Em&sK({xax=q0OJWCl5((vrJ7oKsGT`fxCU zzd^3aYhbkEOpzs9ZR!#b^xMH;!=o`DR)Wn>0XHT8U6IvIgNli2lP8M^1k&%69Iv2O z1ul{X-zSW)rxF?DD%jx9Y=RQTTp7*yuecNQW?Pq^8HF~hxlpHv+H|N_sbbB!$jxc= zRbKFDjo_^1n`D>;j1PBi_zfa~*>cmXcykLR$8hDnT0=QRvZJz+jeok{z5Hfn4R6T& zwH^I%iuj;y+xoQyheTlf*%{s59ef@3D&W-o9W?kP^XN?h=H2#!jnj+9lk3jy+dV4& zd!xSVeCNPP#v0i6vtD>HBAhxZ9=lkTR>3Cb0-7=WvnCzXyuoGLdui`=@l88Ija38I z8m=+hP_=-+!h}mMIUn|hRW2p>M%Ibc%q5d))liHoUVU(+p}HY$g;UYyprnRh4nmPL zd}}WCl<4McHg$Sr2>PRD``vJv&{{gqJJPdv|f>PYfBcS0abh_|;mH=Q4GAP06QUMPCRTZE)adq5)6839%8D@zEnn(W|Y;eZ5+2tKK8&=GU@krf?O#wp}aBvmiMzSTS$wkFB+ zy22S@)J?0VTZPThuvfkxF2!Ta8)yON;YVs7P}PmOU7C<|hkFefP?xZ>y>M^MQ_*CU z=;8kDF_jf~Ih zB`wXuPHNWtm}n@%GhJ>^nv#4Wk%^9HrnlCmf85F4$SkksqH8mHS#S$HvYC&H>qnZ= z(5pX=6)Z4!-Q1~VE?!t6b!lN~9J9&M4Z??SEK#|d4g(QUm*ys9LSo+C^h}$9P1sVt z(Fkh3laW$q$ICV_L=LJW{j(UZZb25j{!p);e!zd#ZQS}(V^saCtRSxtR?+*q@{t(n zgoa+pUMK#ix?)sv)t&ED%Qgo^AH9wJ{h)PSF%2tW=B{eVQcb$@-lX<5Rb%7aHUXJ9 zQHL@gT{AS>h1mIc&PQ5XYp$yERu!9cZ&!q93=VH;7QYmBf$b8el0wZB3636^Bvnk5 z$Xj@JVhZTHO=^r)V!U5Mf>r!KeQJovHgQ8@SvsjKBHcQ5-CpHSm@}NT;fJFAj@vjg zpU#?JGn+~Tv*st$a{L+pwT>9oTrh%?W!cmBcxqvVF7vBae@7nB*J#`C?#f`1c>LbF zyjvVYqPzX7)pUWrTy0~a!aPJbm+v_g>*l9y9AVXob3FbINrLjn9?cTo$vM{o_S7@A z3c6ZTwZek)V!}_&8!Axw_8uL9hD{0^(5p;HG8+sxT49K7?!aFBenVL|2asLSH+>ZAVC9>xunI9qD3Ke}y2=w2%TOGw1~4pUo{|NhDLxqM{V|@LnH2b;lCTc z_xyi_ZX<K zp-_6REcqOXc^>!he%dx7`g5@IRS%`##p?A@>#t~$!_TKvdf>}GWxqB2>FCao@cX`F;w8Y?cA7tU*~1ta|&VC?XsprJjOp<2EYG$1fO4?H~0;W^NB=kIMO`iW4*0zIR0)?-FC zfj^IIM-<;DFaB$gXCy<|?a}!>Bk_u1>^#K&57cSLr@id(R|EV{Q;ff#>c5%>42J`B^vh|->q0fb%HbhUAEBmhe+J_K^r@;$lnIZUk z4MKG_3P6r0haRmye&Qxe#d>sr`bvJ7(;^l=snY0h<|Q)qg((^z1mXn{gi?J#yC!Os z@qP+Gk#Xd%z4n-p#blRpMFH7(-*zOT?VPR|Bkvtp{j%S+N{eP0plwq~#=Z=NH;n$= z?RwtFf$jK)$nc`BzD4n7Ql-WX6&?%6)9pU_O!>o5@ zr0`aT3&3???{xCYHZdTjbYN~Qn5wT&i2zArm#V!srq>MMs??@FH}aYKi%r6J!vy!Z z+j3Ei!S!@ah1>HgJBf446|rP4Ob4g;#&HAyAWhETD<-55(Y~X+WQc5c?%MDr!>fVg z_#*i^vF7b0EKH~DnP)r70*UtqT2;30rz0#W%SBcpv;swpFgTCUubZD?gazPVz|a~c zY#!I-o&-^ed7nfer9I9PeEs6fm*Wm}&cBKMs9SRiAmp#GIuLpRdJh4h$J@ z#!L*(VTpViujA3_2dS4TT5U>tctud&cBQ7ORQhpaLaNA)BejAj98O!soFD(2 zdJ2?HPnT3Ua%z7-Qg~vfTv;tQW-Fa*LN>!=JOG4j&T4V+@jAP$L1ORc{FzD?Os5UN zXoJV@k+o84*bPAx-{ZPDZ|6|;dSGl%=Zor{_*JIt=eC*QohtRjjlZp}&|vodFkQve zeRs?%=3Fb(dSrdJ-OpYW643(LP=qKP0W>7lM*KK;;sanv2L8q&*{r1{PAZid z8NAP%mJPxAcwSyJT~j4`gXHdAd4N7BlYBwHp~`wq+k0X+y3d1o&87qw zNo}sF7iw|kNU;?caI?mRE7;iAvEwG=Jul#G4B8VW;9hf1*P|VRnv2IF@3y%sNX_1s25{^yS4>`9idV!{!@3I=r1%4d$o?}Bz{VkVcxa` zrK+`ZrPw0fExH*!KRAs?Eb{7yzIVD-TXbP^=!o)znw&+gA=QEL$dH$7Jze$K1O<%x zE}*Jh)C8=b5s|9<-}anB39fzRXhjn_oHmVqWm#OuWNq{hKurTn0F3D;w1&JD`WOUq zM*~0x)7I~n;eHkN)tJxY5fvTi&*59vxtR0yzd?jvDgA zf#-4N*EbPnz&CgsA^`0^_iE<+Xn z{Ab>Cfj}v;U^X4%2#hnvTbd#Yz}f^mSz1B$57-^d{7?8>v2|+MOx_J!+eI*Q*0v0_ zJ(P_%bBnXaWl7h`)7<2g@v|5*A=X7L%2RA-;KPCH4$O3OtW1&3!apz{aSI}9o5(eflloAk(?`xXlFgeEb1HB4gO({g{Db1wr!jJ^>!E?u&WT6@QVp9dxvqXqWe|Z=wWO7c6D6(;Ib(u zwty50`>Os2MUTW1Y2nvvT`Ig%y@h#H=@KmQQIb@v#dc3*PP*f!4WMsda{{Lp&|bDtinfav8=2MtRP+o<$6d+uGXuGOwIQaJ zJA~e7RsRnmKr~m>7f_4IL#ugd=2xAMtgBSn6Up?!KPcq(Wk8^*x0%6LHx}%gJv|L7s>#rtVLF|JO=`3R#n5$@YkGPd%2zCWLuQ&v5k)g*N_d|q zq8{1}Y$PYs;!>t5@wVB53Dg8USWJswSg>s;N@?K|i;cjL??Q$!D^y(KQ}h;9Dvg=a zoO>y9P^PiY5GQ}nZ~GV~V$iH(`5~j6WB}`1qYBt(It}xR0+Ln1M_6T|pgevR1;=@o z1xoyR#xZ&ukXbt+#uSnrWt_G5gAxBeQQ=dVFtPKbeYwEQp&G=7g<_{JH$2K_C8MYb zc3H)vWEMS7Px~$t7B8$fKri91CViY9@vau&={PBc4MxR2Z3Us`! z3BxPgX?sgT;YinSSdwQJie^U0_866az4!_w}(RCe`%y`q%6};+9Z*&nzuLgfJp57Lu<8RMQe`e|ypG?6zkQ;}g!LU+1 zm8%WdHeFV$$@H+fVC z_)^zwtNNdVrM;6b=^*hSOxPs3nD@k!NE0{QSquK_B*z#f3tE`Vu3gIKkXsrK9)H`puR^!6 z757PXf_$@Rasg&;HLe6xK06#H8h;*woYa%Inp$ z_yK4KecDvc#7$swk^I1K`y2wMeORW<1I(=|weco10m&VJw0~*4d9}RNctS2I+plp6cCO zt-Z(8W5Fbbe+^yWsw}$iVDvkjvo96BXjHlxU+)u)4c5;&BG^p800P+;mK!Yy(8E5; z)sQfkGLHneYZFaX)nDU4+F`|Gs2s&_&S0l0dME>l*Xl|~D5T3MiNPwbwJOdgFHe0~!UtQE^V8}>?- zK-6npHqXC>etiuNlFWembEs?3D= zryeuYgq|`sSh($+00E)PeHvRZ(`gJ|BB$B%x2oZiv_UEu)~u+eXbC~`M{U1*EQR}v ze}d!&QH2!tgR9*4Ly<3#C>|=o?Lx9-Wv_Tltx4`ONM}mHw~OsWZ*|)Gx6=P zx>8M8o?*n(F_Y+151n%Ry>4BSdKXXJLpM37uXh!gWTrH}-EZ-tSA;??+=6hvL8Y|@ z4{sH^en0fOJ5CaK96A{~#_IUZL~H2Gn?g#IH%kB_p`NCge4T{v4eU4-tp( z?RNvT5`B@xtUe?n{o~#p>_|<1eEKIlh*YaT1~^kL_ofptDyY%cM!lbJ{9!}oNsLVl z3QP@#8b=RSe{{CiF+1sI%VO-;Jik;gscK-ZB5aU&L8Au8jE}vV-W6kD zCwPs^ACNo7#3$q8D-pxBjYh?{ z3eWT&B{4SC2!q++)tX3gOa zde}`I5BLE)XV@d)rWqnYcyFOTw33M+@?ScO??wp^*%r{v#3pfAVHj2ZC~ z4C~xTf4un)w_pEwS*<)wC9p){ei=Let71!|+?ycV|DNFS2Oc1kw&BM?{qo^WxbX~O z*F>MD#V@wA=<1-bjB8RrnqvQh_yITnznlO+@A%cSBJ^7joN=bFq^f$e4KQj%g{QuN zvI?lZmnY-O00H;w_}JqGUHl*KRCzr}#X z|D_xc9W(tV7RM}G0fAH0eSZc}g0BF9l|snb?6bk|HjUH&O3TjjqSyP?Juy^7=d4rb zU#<^DT(?L6AtQe-xQt+Wflm+sSPQuG=OE8L5PGp128hRZfO!0EO3#tvAK+3cQ@9(l zQg)Af0=)6RldA<6IDWTXG4vNTdD^B7zCHQ(GWh>!e!qI;4?9E5*A@f5yU=RAnru4y za=i)2+=q>Oq5p;n{r@eL`QLSv`=0-wuA`Vxz8N`xGa}G>IfU(h(b>6oAgx8eTyqb( zK<}$_#jt{;F0t+@%cBann8J;(O z>xtQOe&Dg_Hm%YUlZX5{y8$*~C-58Z)%*)aomdBOQW$o>llHZ7JSu1Z;y1RmR6wZ2 z$9ra5yR}Sii0M9!wQlrml>+RWJfgdie3F2_2VgG z<69gzv%I~&xh&wT5=>{_^HfsuiS`oYjC4f|i2#{^^QME-3h}$o95gzI=x#RqHuXK3 z_$?WU@qB|Z#kcJR-~i=#Lu_VvW2Fz{!-=JQR`OvyWm0 zVD5_C0)r$Aakr)rS2U%dv5!EKYE$}G;rl&geZ1_MS*b25QgT&`)@=~`L z686=*^kCs>+uNy7N$agCR;lWwJMi82n7!$@t<1Bj^9>r}2+_$U7cWnP?!opZ0BOIc zxMw54Z_UL%v19v_%fGgPeL4}SWD(Kg|Nc<>^(WetLiV83DsdIvPnhUSoEN-%*pRT< z=ees7EgghoYuy9WhI3QmiW7B(a@w0=wRJ8{&m_0E2u4GZevAd$>+q@J_HPgTfYy<1n@YW1U3m}*jt zUUw7dlJP~_8J=*dIpvp%VTA4Q&Y37~O*Nnub+b?An~dR!WJD>Tk-XTlL&1YnYs1Ho zc36U$(i(7**z5zOb9WzN0xi1Z{41WQ0+sZHYjqGy?5n5(&k8De<;hk|>M`2awbO|P zm6>Yp7$4^kWl`<$nl|Q>uJpz*^JQK;3>8h5AAGi!b$@{Coz%r+Lx@R%TNZ(ul9v*e zExtWKfLVdB0nYosTLxfdvpvnQIlKBXPUP#%@(>ti#Vg|yx<{LgkEK%N5lPmP^&BdP zGJ3-MS&(Or7CdZ~O8r_I5t3={Zbp9HL>k@XP{?Snp;a*4TXN5h7GBZZ*V_#Mdj1~9 zw<|{=w7Gj$AV zp8t!MB3tQ=zN)pcIzY+F#g@EIVV#q`vfh<@Gmn2Wb9}{Xvo1&Zb*|ai?}f>_zv}~T zxnmid%D0YeL+#mmQy}!*Oue82gT4VSz2yN}$JNS$H>KFl07p7CSDDiw$-v!s%Q`x? zfjc(1VSXjr@K{xTD(w2-#OlsCD6+5Sk+K6_42w)SuS)0s^rO0;g)lDfhKdtl7^&eF zIjZyI=J8t;YU7mE@^gO3R{3y6RjXX*!v50EOTyhjSfw$x&1ws(SLD0FYGh62813DF zqrt51m`!SIk25+@%W|Mks$H)$ht)lsXw`H}<;7IzPgWC9JF28E{d?Sq0GRguxB=*Y z#KC~xko&_LH2_}z_kaX&81Q~-6Gr%7`VH_7(Epxe6;8kIdCwN$%T1PUHU+TDQ`SnV zhvSEC7q-OD?@xO$&50g)PdABQ&yL(5M(NxOu4Nl4=<7(YhH4yj`q|S313~8f59@J` zub4=%OrmQDeE*Bz3L=%~uj^%SGl#K=a%Rl8cQwCk%UjNXB?)DOQm&RH1UNs@os>Yu z*Onx&hXg2UHCR&T^21-99unDEJ=oES`dV8ukRn_!JM`3@!zeS#UA+G<9BCf~MgDzY z{qM1p>(I~7)9E54y+(YNa*bkWFI&Db@ZQ#D%J(_mPB|)a&nRM4tZ-s_cP?}K@WWp< z2-4|Ce%b~CE&g+^q_%k_1i%FN|7y+AkB?Hfn5rY+?tTI7*p3Phu z9x~jP0+D=(#iqRWH`IAK=W_Nc2L_XEDA@zb{MH{@TW&Tu{VxHmbLW0(XF@PWCuq6K zH#0CE=5x2rIy}^%FQ0RE*2BtIJj^ll^kpM1w7JIUt-^?=B(h+mN`c9_`WB9&0vhz) zJBziFj%5`nulL3%tYSj{aK!$!BJtSqX*Y@3$MFx|kw9hh?jJU1{9;T%^e7N~G22r8 z#fPbgTJfa1P>%`r;VRPIIzs1H?9d$jK%wP33ywYqnQ~uwx>{~i;u_vbIQ(Ydl!bY0 zHA5qj@DPVxBANUk65MD+#x5}wgc<4LAjh1KQno?}GcGo!M_4}VG;8l`8MFxI~ThOrWxo7T^ckm7l zD;~^RKMF;`CZiXEWU~+gdn;ZNUuGBg{i(w70sdpHQch`UDhgeu5J@HjapC&fV33x~U|;Iszwq6UbxG|`D>1Qr_bl|g@xUag}2U+tZDRFhrW?%_p21S|+B zAfO^uiqZuEMT#WSdjJ8Yg{oAg1(mK8K|q2?4ZTSfkRn!EAfZVYmEL_Y&)H@Na|^A`%js!bRHM$dV+Z-_Dl6v z-mUXEeq1$AS3$Ngs7t1@#Pmf%Oc<#Ezl!Y$ZCrS>IzBo^$PcfOpNxTHakOa{?bJQ; zx7%-HTv1DGt{y$)qRci8VW3cvG*8qky|Dc;N1(yV?$&UZYq|;i6ePZ^zd9tGZ$+ul z4|zaC%S`r3r`W{OpvDxpT|G%(!9kXDB?aPF1>OqX|44=vvNan@j&~w{il~ZcolUgTl-8b`y@tf9Yeie9;f>0uF zeJlm9lyEES-FSdv8W=En=I_r*#Hu0toXjvenpOhWrONdoZZ6l{z|k@Y_O|w7y>}#P zrac65<+f%lXHq10?G89kze3jYSt*9wie6-_%pcDDZs8$nTgNku_O|UEyF}#arlvL- zWWd{Hz1T8$f$m`&CkLxxj*=w}F3=|nIyVlSd`4bt33rP2fn0WFhrmI%JpaWh8pb1C zGCa~&f6P9@v^5}UjLT>?ks+(JI5NK|gM%g(WquH+LnWHJb)5oR$c@?^LzQ`QF0hoW z#-_}r(x*pANbL8;f!|=a=Ig81Sie>+FAk4r`iW@Y(E9m>|2cOBdtb#dtgb7|an#RS zl+Mheb(=y)D8h)NHQUWFAy+siB&7*@?~t~@TfcnoH+Bz2kK)IpMq^(2VVVxwM+szD zcA~K^;;FG1(nD!WPtgHM(tcuS_;IR0_z?-hG6*0=xH3bT`p`WK@&2{Oci9bWMtR>+c2-JgTD(^d(tF?Ki*(^U|ogzFf1 z$>gi{w;L^vth`RvKX$}GwqG=g+2end7I@E$%Q&z{9pMH0(b>JGkrb^XG+bECCxm+@ zdO6L75=^-@@Qpp5-P?g=LIDZrf5>=*BHUe%F{Vnbeso(#BB@q4;*n#|A>ksEEgcTk(-wkJmc7NUGH$w$?l41Y&P`s+6sZ%X z57_TRfjaMD!|VKJrmT-a%k$N-I3S;p(hO#iMrL31;DmA- zHI8J*)-0odk~I*O08D4@4u}SuSu^^Vlngx7Y~IbC?&&_jkOAj6?`nX2l|NxdSMkoCe6^WmZ*Lt$R;Tuc!=O9>qD6?9q6)L0 z59YIm{5;WNndau*A!g2eW6TZRgT|pQm#Vf+XQSdIQIT1OkEYwuv*T@U!}v-Yw={W4 z-H_FZoBBbkststBA1{qH=(yh*-1pGUYijw_fB7p)VrNd;Yck6w>OuvC*;mKn(-%&e zic&9X9_o4Pdi>!RpQo@~+N`XgATI?sp?X?!i5UpA>$Wd0X(HQI=r4Lzcy@$9zk%yW z*z+4~p#p(+*1h4v<+;N*xqk5V_nbjg0WY%1Pdmy@68*g$F$1&dH9~nBG2+jE;_7vv zmx;2a1Eu2U%2Wf@4reJmDJEX$Hf*3)6heB7Z;jf8-}X|Ssy3=M8LZ5Un2|@u>!Z|n zT{f`e)LN|uNJFu=Sx?*;WNdr`C74p8H!tb!%$^K;wL3trFMC}2W3KKc42czgrYNoG zkMnl26G z=eRRZ|LSL)ennD%bG)r0QupX9`Ou9o(9fxdq0FXdg~*RbyV+8bKoJJ4DT@3442*=;VD+yiDA}Jy*C=g38q4@1+Lo{j(sJ`*)rbxVPXcx zw^6_4*t2JC9Yf-mYr4Y^q?dd$V*Ya0E%Dq7hl3*XVch(0=|qSMUvGqHFt;_2+ihAJ+|UbNAhvx5*-lOI4wE5e zNJ$Dsx4fd@lJA+=k(tuVj;2xozZg^Ty@eJhL+bFQi2Ri4)G2S7qhMh)+!GG&EQ9X_ z-dP2JDadk9g7HtSjXR|FKWnn^je7gY4!r$et=UzLM7ih8jQ3cH082=sQjRJyh0Lu_ zJ2NI8sK>wYZE$c$nt8wU{M2FS2j-~tR$3sVH#^x2uNW?)atLpd<(Cdrej-sDNMI4K zJ7U}KKz;Y9-CVQbul*Z{V%o%!50xkRj+||A$HB}>t_9;30-?nokn>diL}jS+A2WUy zspR)p+KVt(Mb(ln)onE}m3t=64TWO21@w_K2@imw!>$hoF$CIF#2Vo~6=dlzU(%@6 zJ!Kz(5@IJXKcQ%f?8&k7Dfof!{Fnr@4P3RQPblmPksJH|^Llcpw(yQPG@8RwAp2&L zt)$>bFA+X$g%@t|Big3361(X^NPmVQi%Su{Db+I$e|BG{NP;}s!h_dt44&tF@_^XF zk2II-xI%Nasst}OFN871a^kAnA0E8Ry;)~hcxFlqW5fe95znf%USjAGa36gyMMpnu ze-|r*lrw*L*Ey|dOEZtuYZv@2_=Sh|l7hPtog}CE802TqHnCDOv{lGjtY#<&t*4CdmboKg64(bXL>Z`3_o|O zcX?oyOdnhynU6_)0M9nSe$p7jq^~Ea9nQMWlZ|!@Kj&P0vbXPipM6P;=%*_Rl7a(= zM4b&U@!?}8ZhgVJgra~BRE#M`$Fe5=_knfwk>&X)P0e_o!y5H;BcFZj#n?jZ8YX$3 zrQL2~G_@MVK+hh2qSjFn5u=YqClsy=oA`66LW8G?>d*0!tYFO|jmVAXM{dEZiml)Z z+wDStR=7c5L%KXhAX~&OL zhpOhX4yo|pJJW8_8;OY$gTpoSZSLN#`ELA8t3n`dkWf+X?&-wGpDHdV#+OsuH^=n* z4lIJb(U)C>UAg#m#KVmZpngwK+K4f_eIlt-D@EnhHWeT6o^EJPRzgD8KVv&jPZ7pM}B9#dw&dPL@(sT#hLQ88@YaH{9IcLR_pP?(Qy& zj1_M9{WKg7|8O{x)*q%KBbUxC0VLAhhmlY<%)kvNYYs zeJvGy;%Tu6v8|FHqUmbODHv{h%N)On@&(gEj!)-c0A$1xEQmJ)hJ}*$YM9j&vrx(Hy1RM{`FNmN4RQp zvQRb(75aUD!eU6oFq=(OB?VwBmrtjkh$0^*sx*;c;C91r(oFnvP1@Njk3Z&qH(+2R zvj7f)4St`^NH$5xPPZv3;vWNT(2YNB_JP(61OmChXy`Ay@T+XZaN1O1{}CXF1F_4$ zXxJn?uT;46{r}_({zoz?#JVK;pE2T+c;AQcoCACAf;InQv?TN#q7}Y#SVYeM2C_h@x9H?0!mo297#s79(fH-{5cE9D-2KnMWUi<*{z$J=?x{&+s{U;@w+AaP z=H8zdzm^yX4qSmaYd0&l9lJfwOg^-gZgRTj7}xeE#QgS20VJWCfSY5xCHQ9j`;*uk zT_#(--Lr`ATlGMvN5-~ZR|-r;0Q7TIA>aYC>CD@bRn<1-d<@B!RLxO7ceLK6x`!jlxj`Faar# zlS9D`zXg9U^{z~@;*T=|6*O^ zG*Edd9S7}MIP+`uZT>`EC>Hh8klUiNXWD4dr$NSK6B`@Ql=_-(2BG%?Z`*d@s z>sw;Z;Jm(VUU$(GT1}JWp5iXmmO1g>itlfZAeMp3b0iVJoH0^=?7i}dh$hFX8L?{h z8?g+b0up8?`_kSy*VnU_OSp(k`N)uB?kzs7+h5x>SNz9($X$>~cfrxo%lzdfQ_ zcB)YC`|3_i?p}IOl4nh6>1}%%y7J7&#QKxxyZ4cP9qo5N%{2!MPHKVDoJKeMdsz$iW@w zYx&97MFP#XGO#eFW=j^9z&*1*USAw|R{GOJEbC=w=PzLn?~9iCIpq_! z#1(=Y(Z%=rK4_HaI7Rc{8V$j1TNf_+yb zYeh1eIomY4xYIatzHz<5=%dbyN;%u}jbt4}ei)T(tqjYh3EIy4aV|ZDit;_`cp1$$ z3@T;~fqzyydF#QcKcLMm?--?}PQXnbJfWPBj*fY%+4I1yEM6j{jJNq6JaM34g!*nv zvu!;%a?bgsy3dJf>C+_Rqr5GTyk&J_T;zCpLIHY|x-cn0FsABf!NlSCss4K`n7bO# z&k7x9q%zx&9LR}49y9#j4TD@e;YBvh_jdH61e8j`+4-(wcY&(})Fb|Rz^x`@-JS#dQ-;ruPXWQ(rx<_;TfJD`zR?m2GOx z22k0~eMp`#U}0R)XCi1EZ;m zq>^)$-5)Hd;6)*o=Lf6B3`IkbnRZ8v4}EULXH^z2badaYaH>3!upTI@ECns- zGo<~ujxch5_1=3{!>M5(O<=hGqMJ;{S!|Mi+Ho#yoi4MjMiHuzm3##`~Bs9@f=^N1&;mb32;uT0E0JM5D z98laU|1Y>p=tb)?R+{14$xqU;v&7z@@XUdTr2i{@Xid$F~ccQw6nPx(9z{ zfm6W80l0>W1D{l)j(&Z9Sc%Ph8JN6gs3z3!8aLkdO?)sK2mBnQx98sjGgkue;=DJN zSMIYImAL(ZOJ?ET&a=MKI#f=i6OCERfF~GuTlneAi(l`ACrI4eV~D=s=7~U!tj{(u znT_81xd$KvcUBJ7ogPF|<_~UiTAHnz!*7qtB0yol36CwHkfk0h{sgjo@t?Rh3IK=& zk#?zFYhpRax}F@!O3S>1l|W54Bl~w5>o(cQYATbBMm>Osy(>WArqr%1d?>HQ+53>b zxqh*3=2_MEjw~%Aj;y67z49|kO$NXIBV2m*tI5s}snb0hw+);IYFF|cLE+{4=fJB2 zcVL2(=yZ}!1<_HFMOQUtIMvFbhG7ZVEH&x9@uNTTPZe$HGt3| zQi|pamM8N+B7C%OQYWHFGvF0nS(rf(@YuCZnikZFqgK+B= z=jpGn1KE7m@xX56N0^jD^@=X_Mes=Q+&+PZNwt4Wj0ce_?tIj`&!2P_Fpa=31hh~) zvF)C*D;)uzBTc}jHrw^(!-u?34vXJhe-q)64@d9^YBuvjX~0&BkbaLDj6} zU*1oB7YGKJAMd{;X75+-Kg^QnKOZ1A)xT2@B1fw?GX^)-F^=BTF;yvxGtv3u9a&@e zcoRZ(=3!zt$W%P_?Z`V4@pQm)N6F$%WHwTYYm3XRR=9@N4(H)Q**074H-v{)9wlzQ zPNeGIEKR9h*(^ukremMm0Dne>#Lb~umU9k;4l~iR4|==_i4^$lDa1mrIKhV7$k-;u zJa-7+%|_)f6qlhUvvfjsjXC*4tZ;cP!GzFNuJ*EHzrcW3uF?Dh~{ zI&$LF5DG9%LV3Y&iOSt>sF>^2w1YHoR2raxG%+Xowa~C=NEWVFKKE{6CfH zLSHs@pZmOO*Gtm(s@uWW^ZqPMsIF^cEtSSzoLHR^^t;dP0j_2qO+)yt?;3d-{GHj! zxT8Z$MQq-2QSsN`0w=8Hkm_YME9Fd(?O(Yw;UQd zvry8mqZ&$zmA4G~mXd89SjB$a%vGW}>f}Ez{QCA1z96FpmqYk|wB+Hs^o+U^hN^b{ zBZYbY{KU`~l0NjosZ&a0Ac{>uEA+&DebC5@pKZk{j-TBmaqg&4hx@M7b4LojTs94C zV=Wn5Rw8#>F3BNYpjI9s@D6^FNrX7?X2LGku{p zlCP=vcDaB;aP5HpK$xp~mqQjQKK!WcX84e2>GJ%z$(0A66TKJMaGwag|A76L$3Qxt z9k!XTPbtw2JQBJB>#Mlqs{mtWKqVL!oNCeCl)b-Id$bgvZf@l;rn_-K0#?M&r_gzn ziCE)qklik3c>#YYW+k)i%J#in3@nQmr;^)<)``FW#}ycTg}gmuZtTiKtfsyGywAG~ z1H>uG<|9lrTu!6uWCpe;wE;*h!^uo+#l+>KU&-GoD_Tkz#T&=+ zA|I3xfns%uv!#%kDQj(960w6@XZY<-US-RacURp#5_%zI(=Ig(m&-D=qeU-vZ5=Gg z8L{z`ORnC&-rb*Ds!{x9RN<(w0=lF$aQI?^qEzlgzofW^%{^!-T)*VQ5i54BNa|$g zGO}R6f1^^Lq~#n-0nB*=mi)d*wrbnXgl)SwmGx~MA1^^^#f#SUa&8^BMleBb;bd2) zW6r)fZM*bngVMi?;8$M~7lxv37wsfb^0}$gUNP785{Byyi;pqqI;LC@d0(+5C7Inn z=UhF<#K>^Q(M=}>vT6Cwqdb4ASx=g~tCt+J#QN-)pS%NN1q_z_>!pib#}6)@IGoyq zdPu#Hkyte(=FG~K4L0;XV>O1(HY-z|G=)JXK!EFrfNj;^e??*D zXsd*6o=@-P&C)^J8iFVXfiFZ-uXK~e^fQma4$%H|JN!ApM9q6^*zrnwi%Z)V7Swxw zD_>j5@K;Z=hp1vDZVAj7RYux!F`8D(Gs*u5(HvuJ7y``xgk3@e47H1a?{sP8UYFMW zYYsf8BxE0M6=Z_H5V`7uC~q+rl_@7nW! zTD-`c8%Zml|Eg8fMNzRru5UY|kLgdLWgNiMkB=|j_=SPz$g&DP8ulmQ*%Oj4|^PH%-sp+j*A3$K+{ z%FHU_XYyCPecK;ha#9*BG`nL+>DM&bg7^T~Jq`>bCZ-`srl@g}C})hy^a;F=Q$z1M0z+gl06nKsUwCkcx~{rASkZY`xFn4&52EZ{Xr zzPA-(C6nG?3+(C4u7Q&0?U($%EGoF@yVUg@w#{IZn#uR#_(4&&&_?ziwAR=UiE}fA zI<}!ram1ot3U4(p)8@?F=0IaZIMcUARNgu2yV|88|9}lQW}flVE+F)*ZBNX&=U?go zHPXesAA1an2Q!ykPSJmUVURGaJ_TL${0z0;w3UjDJbKIZ{rSfOA4r~Tqml=I&c#YI zPrNoV-i5;#Jz1qc#mB#}PEC-)u2C?q>EWvg2Z@#IeRy~IF!jB#5>mU>B#0lVYQ?QE zr!GSBb^vh%PP`zbQ76)?09z3yJ@=S&H8#MbeO#kND*v-jXuQ7PrVY4G{5@gjRQjkyPx>*Vw}`MPDQ1mJ4X%f0q%L z#kbe;Hg&%$W;?;puhM8?EW5fk$T;dKh`_bhjHx+P;Z$S^t@XSqN_Wxqw&sFrY_l7w z1rp+8PW-{WeQX6Cxsp{PpXDbM{T8u4!R8)iyh3#te@U9E49P(2+u6rLf~+~wyxTPN z(TWA9E9qj8L=clTCK3>iBTre=h?F=OcfAy5zEU7NdWw4fe8O7H5W`Wgt~ta4z2o+0 zjp$SnOe*IKED;`a(9ZvhW?-vqd3JE!qYM%|wrw(->BS%s&j7 zR0`e)p|AF!Hexe0RE$Gy{z+WCSMJ&JnaAYQwDOoX3>>4ALG{`xEF!z3&Y;xBWf_yK zfGP~y$Hg1kid4`$>>!R*@+e! z#dIa!16FIJWz+c^Gj0jhCYIJ#+tz6|3-D|db7n;H?(JJRjK>JgMr)0p3D z0{eQQf!X?)32B|5oWM6<0k)wIL5N7tX@-DAentd+2l zNQ}a&F&K#IdV5oxuyEa`ZRItLGpx2O{UL;=P$YBP+tig$Bdp3#q$PAyBk=?(1Agm5 zqvW|~QPNh$OFGnr)m^+*A_S))4p=lpzJceN<5#bN#b=Vh-8+ z%(!gj#JAdNJm-d_R2=pVo_r%iA#Gstd66nMUpiaUg2;@2Ve@veepc4tpfs_Ftk^g~ zMYCODq2nAF7AAl-PKj|#>*3+AvA;p%(JY`;I%0e&*paBwG8cUa(j_oP z@nl1G@dzjol4^g#;euDlKH|t$J|;@PTC8s$B{RoT8V1gGO}9#K1Rk21q6z0VhPhOr zg^ltj?yI1sJ4v4W1sl({euF{z>nm?Vm-vXf1@ufUfeit|cs!|VcOt$y5x*_FIkU_c zT%>f#lePZzb~~-|<6|qblgkhqMR5^L$<6V$Y&(5=!~HYj7aG8BN}c3RFfT=~6)PSGQLw!#iOjxy7T-W7_B zmmS8ygVT8hQ_BtM>Q zbYHo0b-3tY*Om2DHKd^jEr>MW@h+D|bKGLms~D@F9=WP6**b1#9lU(3S0dwM*I~43 zk0s_Vx>y}?9TZjSI>qHay-F}oO`7o}Fc28DE~oZoU*+K=c7|W`RJp2ZNbO8W3}?^f z2A5VOAjlOA=>Q$>cMMtmYt>~&scmd?`5A(7RJ4Q_1qgXa83$kg?L%ipJol&Ri<7$M zV~6au|EYf^Myiud+*`xy=q=&y(U^#?LMCOjQwrq*iLL&WhvGEWn~ekhrrc0bC= zsNcyok6#=0uSqUzFO0D!|J6|1dwB*Cvi*18<=x9oARq2mfCT+sdZp#+ z{>u9D@Lq^yd1gOGP~F`b9+MOP6@2|aU96op`nN*DtaWz%ou~Zc3eS#X{DxQ%B($)& z`^<_uZf0mybY2)*zfkToss?NZhN>sV2nJibo38TLnBZY%<&<*M?R;hkFwc3$kCu za=?Bpw@a=8sjMWse4^H?GtlwM{O59fOX7BPX11oA%T$4`NZmEjPdq|(LM75TWyPR>pu&Rh?eT->}xM5fB|}tB~{pz0;a$mPBgLx{}%PMY7j^N=-!gm&IX2YxeO9XuAfh06V%JAX2W&mS_b$LeJh(Qy#f zC-3#X_GnU{k3+bTlZ4p;8xND!CPbkEx&G;oA(z*9%iguFU#f$0A4aM=X`V`O6&0`R zv4_PX9l3XU_2Ip-Fn~WY4-S?}Poy%|ibZu86}Ap_T*=V(NYijkcboc**wjPCt=c7o zCq#ey8W33!BD=e%eGxZ~8Kah6ha}Js)*UlKD|Za3{}0rpSwxs_9sgoR=^z zYa0}PJ~eT30y=ad7V%vR;WScP;}(kMS_#y=U4Cw31!59~Eu#YEFZ2N9a+;(1dOSGCj_km~^uI_$@#tDs|-8Sj?Pl9{IP zd5+k^$wGN8n!;WZ+2I)T0VZA*T%N6~-Q$8UkJ3ZD9`!!$$Pe!gup^u3M_=x%04KLy zlt|-J5v>euAy+83R7tUvWQp;c+I%Dn4-dKvWdczUY~AvBT;~GK}F3FzP}!5#v%- zPQEsV{7i1^MeGA4FXZHGZY8)m2?9WLuAa6MHY*2%_i?J94BixjtCRZblSD>$Cq}yc zL`pZwlVt?dV}anMr(KiMwRqgx_PmHztl04`__~0Gv|HV+ul*!_{#McryyW*^_Y1d` zf*YHpG@@k!u?Kq^lwzsehU10nFe6Z?)e8?aw!dgt#kiz+UW4q)2h6d&j_``zDfZyr zILZ^N+YBC8wgd*BGszB^Yx+MO$!srP7f(YkZ5X=Ji8R64KLrj0|{*o z?m+r^ATN)!>vD$102`Uno%xbh%#Y`)eQ}1B11T=yFa5WepSxM;oN(S&07%n9+*M^%H0+L;HEux=Tp@Mfi>ykJo;dAvW{04zNdMRQTkFatBT zL|i0#Z~eXk_wp>nnGvVa{Qurky>|>^@N0WbOnrc02DQJI|IG)q7NmBwAOCofB6fbM zoc*k~mzAU1%23T>MoP9-&D25JwL7vW564EVE*0Q6r&1Pi-J(MTBu?5OzDwXLg9u8c|05`_G>=L5gn&&OPV}uff}E zM1Luu4;8zchL-QtDZ{--jK$*D=5X&u7*N^4lUu|bj$UJ< zvIJaxq*3#JEfof$B$vSadsS;2_<>C1&_QTzmRRD38|D6n07Oa}giT_OKiq4rLak>nv57!vFShks^Av3%0xr-Zwi6^579V7K-@&Qwxq_y`Jq`pK%L>F$BkB zn>?1@0-XuJQe8U9lU!_v^U{$IBS{59b6~eeQyLFcrY~tWE4@FL(A13>b9IbP=*)IS zt*qcx*i$KlvS}x%+f@Mye*V?a_Jtw-&u2<*s`<}c$#b23l%%pP!84#P%h%KHz{PfO z$V9Ki0Avk(UmdP?v$^3Ny$UP&3)tRH4%ESg>rBLC3mLdgL# zT-xl_{d>UGX8$#Kz5!Nld*2MN`BkiB$cZg(7vC?E>$cXib z-T~ad)FPDBkhLPZHk2! zJ^*FDB}sEy!N4^1?-1_bq9e5`aM6*hv%RSmipGvEMihl69T zCD4P5j{M`L_$Pj*{*>v{fxn&z%Pax_xq_K;_jv1DkEHKsG2VZi(fhaOcac%Mi2g+-xzl~SAobw860BY&h=HCU_gxK zWGdFkXs)7MZZ5ktwbJ_r}S zJRm8t)7M3m5Apmy#mX5dFy1}iasz9}XKw1_Gu>@7rcuKY`}KhJ%5&=z@6)ow-oA zezCSe$Y-7+EBuE^9oVDdff{VF`P@*6F5MpM{;c>1kXT6arC?nB-AM@NJNgg7^=&Nk z^)?(Qq(G*6_e7kyq2#{Ma@kJi?1t_-`|ESc!E$+=Y-hDPU|dpbwhDiN-Om$mDtcnB zn{2oNV++MA#kjqp+eq#mq(ZnHcxMY)d8ip5l@e zEVshL6)S;A=yWcSQ{*@0bBi3hqnyXmJxG^=3D#*0wt-hES!D2x^ZGFM}K;`e>|Pi}MibMcex@a4TZ}`Q&@us{f8l8R1FW&=0KK{cA=rRbMlf6qD-cU&kD?;8<{axRK(;+d=-UW zaQ3af;cGM7d?4cf6}F#wog29h;as~w7yw6ogz#EHa5)8E#gPjw^KLyPjs?gAUfIjO zDnfNNiYidUmQIp_6o;cWV^);lA^X#aQltosR^_Zv2|yhBE&w#X6|6O)$ZFErr6gh= zB-8oV@Jef8G__Aph;{0*TjbY@++HN+7~YTcRKN*QLK@!V3Ae5CYrYfH85}L0u&L7N z6u%BJYoFXwE#dW0w|plrf7#6`#HuvHsc*)~END25^2-RqV=KWUIYNM+$@p%)fFBIe zn<^#4KyWED!Gz4V*;^SlY z`FKx4hOGW~WlXPB_Yo~Q$KEps3|a$1AKX1ync+jt-q4JgLx%q~BF{VXJkzqQr%CDk z_e8+Q=DduPVq&QrC8x7cYIS?{$xC}Bp|3z|dQc%MSnT8FOid2*b-;#XCDtrgYpw^Y z;Toa|o4wWnsfK0C28Tybaa+tF)0X*bdOUreGG_EvWZ=Zf$cLRj4UvYn`Ig}B=E@>L zQCsSX`|4s1Pa@HppR(HLg)zC?bYe`#N|eer>TaV*uZ++P8|MUQYu52b^7Fm#zW9fn zRvWos9Q4#eDg5?qH@U^*bQrn>-23ba!#d~l&LjytEA=GXx7j#c)o@$RTtbpq>a;%) zvvx9DbqRF{aaOmFHo8rf%1DkfEbBL*4Mo4@B<8yne;s3IonL@NIVtrt-z;j5Xs}@Z z!VT}zZw$AeeZ_B};B%NcR0ndsSh)L>rVP)kEF#LSXC7+s)6qNeqH<-#MI$D&zPf_a zMsk(Xm+&k~=m=bc|B|y3x~&I(W6SP9QEG;}5lk}`i7qaVrfPr8%QQeYmISbA3W8~d zVOa?&YXU&oL6S1`SA49eCngM~DNOS{4*$bA&Z`ft*9}1W8&W2G?hPjG^!E8nxdmT5 zd^1sVClon$NP4aa4{9PwAN`0E2AF3vMrnR@{bSIiP61s+lzx@7F{~!vvoL*0#5#o= zeJwTq`)O@M`q7B8wQ@UvbTt2UmE>HAkL%ffBjcLW5MIoYW1UJaabwB2Rz(?5{G9#Q zdJWB+&9B=x*=^q9aitrE(ZEj$crZqKh0fT>3SITU=kQ(Dxitk~+2F=K&vs-+15Lj_LHXCadjgq(s*K$X;GV77}md9KI&n zm(VDiiMhf8x{zdRK#HPhf|cW?ii@_sO5&h%6Lk#?U3PJ0aUL=9sYFs7Eaw{g)5rW| zqow6D(ykIG5l>JZBNk%xUADzKshTIETOu#Cw@o*r+RC15#KaGdO2(?bG!2lK4Q<7O zw2iy^*6TaLM7Dna{7{N9LyVibB*{hL8OUa8sYopl#W6bgX6RyI{##Oo9!x5FMvgNp zeQBDX^JI+T@?PoA+BoXLdW%NTn%sgdf3K~Sg{+FjpNU0L3my}aRXM;eH^>wGO}!*( zxlm!Nz^geLQmn?&xRM~!ky!D?O{!DauEaT-TBEWpjMX0XWr04mi0hhSH^Glnh~BK7 zqhm9-S?sQj(qo3_0}GfYT;Y1gN0a-w=HkV`BOKRjsqAjxFxTs%v)p^E$MDSx*vBUh zTWNv$9v^d%-#sQp3mc;?04q1*o$jNGzc4<-UD{~nR@pC=Fz&;JRw z=RY<1f2t-sNMsj2oB&w(W#AA_yd4r;+56HN?cOv%GzBFg>1%@CS|sfGTK(t7%KzM0 zxzj61rVspAR`_H)AFNZ|^;7$AY9e-DQb^`CCPhG?dE>31Vp4)1q>aegc3tgL=>bq=>h`Mdkr1w z5PByB6r_dF10*ClSM>IIpXYnenK@_X`{SE4uQSe-%Urqk+H0@9_FBL7TYh+~rOH5e zi4Ft;F+5be{{#f020oq`JbePV+~HBD0xneUPgL)LijbVEz|AS}UCp~7P-!^*@iWS! zXI#~c+(DpoZIr)Moi1OkL7)i7hxhM3^)}x?F%DXf`Jj&`?oo-_2`$buWs80=?1=mz z^vp)1B`mpBr#rhR{ZUz2K;@iqw}{ad^|Ljcv>Go%f5>!vd-A@Q*)^d{_^dA9GY!6* zfe*|x?j85C>5E$y77nEuoqk{ov9@Fj9JrE9>_&**y(f=W+nmLX-T~4Dt>( z8eyBY%X8c*=skG}4m4#(AWMeF{**a^9A2L|OSu}-Gg(ru&BmWWCn+DsPf)W_t|csj z&6KNuAMcTLq6pJ4s!*L+fl2Q!#VETf*gH&`BgLrt593rgV0hq*>9?_@8JP4qLKK;W8mI{IfWR> z^%qOZC_q*7&V@U=^o|mjM4NkSM4qC%zzsFKkv@=f*Bv}D^6`qWa=A_hK5M0&C@e>& zI#sHtFt7q~p(pC2tnbbiT1$I|lV zC;Q=7<4xTj*1eKIgRl6eSLF7JBSh=<8&6BbzjHlWieLY6?}6Kxp24cFke%0%3pC25 zJXRYbLWpeeoN#2@>M~hYMm# z=%u6Ys%NgGc0D9VOOmeSKNbbcRjQ#6+X3sd4zNKp)7RD*;RJDRlbwLpl87cW1d-2x zq&an=FY4(?1<03e7<7|G$E*VE##F3(X0R(Da5=xe)FAE2sRF3872k3B!gc8@fTLmg z3@ZL|omys%xo(nc_Rbdtfel97NL3WXs=*Bq!J@IUt*X~+ zmH7#^jg^9~Jf^ij!#z?gkgN8U7{(Tfx*Xuf$VCm>$o4#Qx4C6@+laiDxqhc3&K4O$&=%()QFqOe!kNbS> zFVu!uyWn=Zo%q5}qsGQ(nXSZ~d7v?mm+zy8Y~HnfJi}h^oTe4IR~>(~>liU>RQyIM zzkKc*Zsp#)oa)fqMevr(=(uDRNXH@`!st{r>uP_`d`96}w!(sLbx5pb2xR)4{in2eyT%0|EHA_%*3Z(*@ys4cL7F_*E7~#mZ<=NzO~3VXww@ zd&}fYb;YXYi`aZ#5+*YzpUJCM!+Zbc+vG-B=col+9ITuvHxINuyISyK9|cTf$O3w1 zCWBbMl60Nm(N$W=bqutWohy%JPp&brPNoCKNov+Vbd>KUoO%#-$|i4ugNZIjyXh}!zUgoR$%__08WuccGUD~b4JSGj7;dcJ}1X`7_gU@ zjSb-v0B2PI9j#y@9Dxr7^#C(5y3vM$I8)8NK|Bu&naSA{B(ZyHJFan0UonA%|IGVQ zVDQXUU*(9w3hrDF{Tc*kfn}B{QFGZB!Ujp2{r7%(maGgwonJv-;W!RccLK-R@o+~^ zA)^(rtVD7pA8_(DL2cg?ONUp$FJm#1_*`Ube^CR@xQT62v4nCK4QZB155dZhoDTCt zkF>=2C1;(at*Fco&91Mvd+u?yD`jFoXrh#pFia|AFT?WZ!|%qRuT{N2rxoJP(#jsY zF^9iL*zMc7hjP^U=O=)U5{l;Uan1w2yo*VY;MF#Kxp3PWthR@-Tk(V?UjoNk)5*i@f4^L*q#tVF|IZHn=JU;V9P%`jEd}ij1Z7A*x0#eG^pVo zA+ZksTtS4H|M*LO{rz+4Um_;g{)%ne(d~_T zGwlT1QLTI)vKd?};haZtYJm^qx;MGy?rPoFQccslv5az0>M3rWFNi~5dwrV&n|y~m z(#q4s(G8hl{S+`t>!OS___+sj5kP>bp+aTOS|;4EUWBktpM|Bd%{E8HR)_*&WMp`k zMqQBGi|L%D`p0o7nD)chF*(D-Hr+I3&_C8NmuMyRchV)JH}f|2c0Y|;rae>YK0qh1^q7k z&VV8TgVh0M0V)Tww!)gj?;(}ngS{GeQx@E-I=P{Jq>nH6+NvoJ(CPTU);Dz^iQIr8 z6%J;%Bugp(`r;lH&86pLcGtC?UJ1D9kxM=$I~2T6MKkTTHQ&PFQvVW2Y*^D=`)^H{ zLN_X(S^!^LUit3{;A}9tbXA4&N)as<97>ocG#w;;H-EDfNQJl+@W;CYO{D$eO~3UE zz$5-+dkttp1Imr3|1)SpVB_F$`^PXe4T`M=r@?TmIceCr>y%gNv-40_zdK=?;D>|m ztqds#o#T>mo!{={L07w296%`fYe|n_b74Bj;Ht|9U?eWZSBBHYPtidlJ0p!)SPv1V;0;+{d{PAp-wiHw_ZX@SiDqNL%vD*q>c#af3c>$R@)+h&EA68xMnlchhpBKeA88xDv~ck`nj13%)rMZA)^ zM8n=N5EtQV=Ioxk;yeh9@WVFLK@uL)SfyUn74_)Q?Am$*9jH0)Gl;U@Mh?`5EC;AA zsnE@*7tC7n6O6y*=A`1APcqIzHycm~8kU_>4(O2u1z>54{r2+_K`#~_^?o|R$;6Ul zM8DNlZl2mQ;~n8{&rH8nhNc!X9Xu2N3e@Zy<$0RAMu=&?2S_0yFN;-pZ}OTYP46G@ zkQR924CqlNhSTch_`^=6B8&J*AmQQE%zj%$*qB_51Z)I4?x$$szLjHh+0)?>6{KP? zzU+9W=B>LueJ!uM$sFQNh3j3RW|04f^xt#%L2bzT4ga2KoR-pk=vk;c;Nd8Fi&I0r zy{ohz#YvMBc;YtgvedXLjcks7HE6&$^u=&1br!JbSKpnOy+r3~6Uu6NIebMx%e~_L z=i|z{#!Ztq@+f5u45t#;8jsGZly7&&0D7+`H!4~zfkk0y7b&k@HL5VPV?}!vZy%s5 zoT2c(1P)#f1f!%~Tzp58&T+}@Nhh=ZeEe#>$6pRWx~|dV1r9bK33)#E-${>W>uVL=sq1+|$7* z1IFX&!Gi)Mn9V;-ASJjlo&etHOVSsrT}G2|)xF$}xXNPKPsy}x?Ppg>PNF9XBTB@P zYcEn3R%(#B%;pz@Skwrt3`0%SgD~W__*Q2&`rVHQZRbhU3=I0kb`_=WwJP1o`P6d& zrc!Z-#29&EmI+X*$Tr^~xRIA9a z0JNrScJmEp(j&DTe6#cZ)XZ4bET#yLbprndz##v!3_{Z>5fcy36fsOkn8)gEX(Jv2 z%7m3jl8O^+#v4QJtL~k0!|OcU`Yl0`8szr#uoKBxbsi%%D%`TBwy77J)}W%ylbd!s zh3-n$1JkmVl+p3F9*VHd6JWqKxjG0o$5xVE{JH8(#iz_CI$`wd zMk+ieMs*L;axGUhGQ=`&M3u3#E3l%jV<*G~yEYYna%l<&A$IXz#vGxg6{ zFR^n8)(1a6YUW7G_1g;Y(U(Y`;dd|kH_cC-qH}$=9-`k2^RU5emb>g1Xe_sG8@i3_ z#Fy;;ZNZ3jZ#*GNlhdAibDWdfu+z~iD*#YA3$k8Mv{~+_hkA7ZD4wal7EO(u9PSm% za9Ff>Og^E4D5G08jqPIuj=s0Qcdp1&f17@LczFKGx`t8R=_&xUgH{r%4#UB5VA;-(iszZWA;)WhAWvp!HF{5523>R|nhdDE)%D&~o~>X<^Q z5L8r*u_vJ;MpA5uxm!O`twx+wF3f3+W7o9m?hSMwhwZ+Qu#jn4NesK7Y5XlrT}zd$ z`)G-Ew23$H*hJ+(b{%o&Y*@efNTbji$ILwS8e(=xcS=^GehPq@Wq06Urul5(fO9AW z71I^k2QW~5x;6(K)D_{swZ}AHyQ=zt{;2u9p-w$;DBE&U*W3b}_Aex{`RVV2_v0_r z`VsU0#;-mG%IuHoF8%bGe_P$K;e@&vRKL?=aIEr+$@Sq;g4dW+KmW;V?7vTRV8Z17 z&`_|HRHLUG1fuPHJlh@4gPQbqKj_mq2Dh(raD*Qy$sg`)S0sOh=+ERNyYJ*rw~e07=phO$iyHCv#JZyG_4LA{(U(!wH7){H*ft= z`?n4KmuqgWoBG2->b^70KPbR)&gg{Fz2`R zVxQ%Dg*;l#Q6k#aUTp0c3Vr64Iwy%lG#htV2xPI2Cd6S-&a`P-jbxhYnf2G0q5Zf) z)^m+RWgL5}h;jSlG{zy4%AV9V?R?tAe1*(UKi2o{S{gUqV8XtSABdQ&ohGthL{@y{ zk@aW(9qE;gi8W8FIN5ln#!4lTlIHe;GE!1RoZ8DtyOw5U_vuA7q$0q|(L+mGhEprm z3y~iCn=YTx?>uvgUSn=NWqkzG>q&=dWg*raL`hwhl5c%R?2>aqIr5AW2g|01BR9Nt zeoA>)3o1NE*IDF<%co||iKYKsJub(=}8`4 zG|2(2S3f&vqmDjkJeca{;WRk|R$nIVKHDO$qa8^;3|b*Bi-dYDFPPzOvoxnFG<# zcdvWsJZZcVsvkV`M#z|l9vp!26~y;FJN8wJd+yFU-x!&b!>-x;*`q&E@vkrP2RSxd z8GTOUh%9ZiiqRS>1KNfAiec)u#6y-$v5hl!XP2GXIeqY#QzhhXEeF4KsXVvJH$Fc} zC#x%mPGekc&M3#ZRJH8xY^{*|0K zdcsf1p@w~=O#D5QFyVIyZJ+cWW<^qu|FmB&e#`u^TwgaJq}Dc)NiP%F*NsKYdt${Y zk?Ru>_ISnbArNuvs0}`3GCkawMxtj{9UJ$T9LYmTqrs#M`q=lgb4KWn$X|OXEh`zX z-ubSPiR_O07Ek29-VjHjwZ4YTFOlW0EmQ1+e|hOq@8`&0%Jt~e_ibp6gB|#w`8kr~ zjvkz|%=+!p9X;t?aaMDU;BrJL=~+n=pk1LKqB0&YIpc2B!H)3WuGd*BPs=8ov4vVN zX63i3p^f|5eQuuNg?(e)Fr8FA25h3@ta(iBY7tA>?NIRw<2BR`L;n<^OZB{W(Hl44 zxmU-0oNXc#bw!%uJ$y&ZLYuaeg;F*Lg7$V)!Vjfq9xcae{Si|gsqvr&M!<16*Icd> z3uy7Wi>~-cKFQPE^EOnTHzL|CucYn!eQi<-v0b)rgr5}6U@pn(jr6#s z->3+Y8cb1L7n_0CYTrbN=iZwKUDjh|7>hpr>yhkbvB7e=_#k(f85=QM^0(x^L=?g^{) zWrbr4rr4I(xkuS5G06sp7n^I@)#s?E?ASSL8+*unT+R0X$ga*h|1}H`xZ+BsEl%R& z3bI?4{6l!6Z$yzSChA_C>B7Oco+!cFSs{#wCm!SWJ?J|V51+YAx#La$9X6LgNWRlYBUnA<;~lK zT;fY)k!M>7H|@ef)Q0wVwEI)FyvNNiKurnRj{~ek7PNES+qocLcRcZ=eHSTmJrIkr znqg(%W3DS<<_xA!$A5Mejf|dqRmfkIJF8?>!>pCym$N@ zI0e_AOi?unZix@6Rie^=_U!WTQoN%0dMv$o%^ke9;j2T3Ti0t|i^s;GhKKnh*JiTA zF-nNOvQ7p}9Dh!BaTIMOOI&d`#xZ2&A|o6b&i}UCc zf?vV(n-+r3UC~>G#wF*v$0AD0oh&2)UhMIqWk@ylF06k{Hu;7No>Tx2c)2>ldU8f( z{*4WkjniE# z5gfYYrNBU{;RAs_N&SwUb^NdEFATHQE(;8TMcV^ z#lIIlfoVQdHJtml_tuaq4{WQ2)@ySPHse%{@?9^KraWxORXyw03t(B!O+*|8rQ4iq zpgqSa^XhPG`$wlxvnB%L zRKg3v&el3i6amrNZVN5XY_$toS6jhzvFpNbYwRX0OqN;&G4d$7&imJEbNd}GC_r%( z*k|}H1@9{e2F70|5jM%k%SugvpcMQEzy;-e_f`N3#AG31hz3aWpZM?Rd|u+>WE$G~o8NmaNIO>H3b@5+ZABoIM<4%`KB8@A$N&Jz&EOxM z;Xv5GI{+Z1KADjy2l670euNOBhMrjn)t>rZUFlRV`hJNN} zn%DCLI4tIvs7mi@q4}uRab}B5sB`fZ6MESl6Zs;0s|S}1Go#cjNG>Y&I+Ou0t7m!@jFdK!odubLYDDs#aHXN)1;IRyVnF<0WJtpRPCs}|e zf~lgxPw~tWyHpj273#iY9;N^+5ugCu;Fl=OwVx3p9!1;9Ix1?Hw=+Hil=yFMVbgu4 z2BK{iQJKKx*n$88O2&y<1-d?@->^)=2~lE|d{$`a9#5M_T1?n9Y($s>`!?SgOwk`M zpgsgF3tzeg2q%cv9Vi#%25H%tYP3(#*(?%WU-_drWk*gC{+?Ja2NErR6SpG9$J@q>t)JeY;reK*2~7+rzaVuUSA8cZM|7t5))-Lp->AHC5?`ZU9P;Q5_BGEs zMF$@M9eg?Cq47f#l}Y@f>6zs0*yVQH*d*TZv$avN(%roCaidPyfYAF=W|886*u?LLnzFGqjM$Ms^B_qWRWoMo9XTtHM*f zm#x``wd-I`QITE)`z39SL&w6I@3|lgFXa1*KlRidE~53W@_FI4&(qu<$yF(PiE zYz-Z%ah~vs3?72V_<@0$r(QP=Q0Oj&t+vuj#AK==5CGfAksSHF#HTr)LOQ_(K4Buz z&8V=NF~O|u;cA8txP_Mho|%w*JPrRv!53 z(#d{*#agY6KR9uNTPSO)>0Cs4N%Y^k!r;sIdNt`?ufQ(uGh6brYDm5BDM`+DmI#VF zQ>q-5BPG$Rp(I;81I*D<@%LtnDJVo}N~>tN8o?dfrkdbQeyLJ5uPef^wf(?a2Zkt~ zJj-PT6x1_Vd)6$-`L~}u%@Dt0#((^_u<&Bl%c)3J^4np*FjiyR1L7cDC}+mjR+9aw za>6|SNA;H*p2cX7zY6HA%$qb0Q7F1zcMqPX;cL8{fCMDi8qyZdYFkOl09-j_>xyBY|^VFr;zxNb| z6s#xV=Q$E*0K(25^O?(`MEzi@<=-P5 z;&HD~3Tq^He9P2|{H^7fKw`QVVSNNsV)Np^v_&BaR-`qZVkOZ$X|7w=5`WQxOp!TnmH@ax$6s~V zib`ndlr(O4=GshU@Jpf<>g<5RuniCs$N!DLX_%v8?|MM|xiqp-PP4h($Z*U$-E_5N zpl1S=N#VQtw^O#en0PbJHDAx)>7l#YZYh_txs6gfLk5qAIKa|adTL=qpEo*PVL%J% z1qduQA#r`L4py?o8b#s^{Ku3T6|R&IZ7h9@paIsTK8+x?WuZn{iAi<9s;vz+GN2Xc zSqCp>*yN;wy{U^I`;)`#$d-VASQ%-AqqNN|>mUQumw|x03cN_}x! zf;oTh+6@ei8_P$>VJuSDq~xAqb;})xqA1*>>FTYALMZ;j#MD2K$RUw z#iLM<&auknomH-WisN+JIHO{mw?mmCVG0P!l06S;^T)e%b*pTdrO1HAd+mixb0G7KSp?_?d|J87a(JL3&=Otn${*1~n0(P%SKz-hKJS=!a3lm*C& zUlb|!CuUsb{{dJB7Crx^L9jDPzhuRQVbNqps;z0fs%hX+m;-$tMqN1Hd>ydGnPx@t zMc0M%L%It*-t@JffvP;2nG(-+P-uu>LA`kjHgJxSS%-sWh~(ul4Y@g>;G2~b$S50F z_zc*}Kk8k>!mjXD^Tlwj(dG@?FVZLQ=Vqs;tSJ@5meZ$!dz_byV16f&E2FIc4Lz2ceV)lqy`e%-`?xj#Vb>3jLIyw%V8?68!LZ{XQ( zzhM#WKrLrPT?BDmqZKXDbzx9CNS=WhrAOy1fQep%ClH<~!wE*r_I^yGWE8ej^7 zs=rPNWSPP9hb0F@7fsl^oAR1IBjxkH$O1x!{ZFj;Ytsy$ha)E zJ;{nC3MZvz#shakl*QXXv>qg%L6$0mC+rnV{$9x%zT>P9!6di445{+KNUs2+zQWw) z2Z^zn=y5Mb@liN_=$A`+Rm<;NVc7uJ2^E|P)kDhp*gYv()6Z+%w+jh!mbfldpe!QXt+pGIOoIL!y~9jk?aIqU8V3+Y9XbwvSo0tSktMMatjTb&nZS-tRy{Pa?O9!T^ppcD>Tzq_scJT zB?5bx79~-qT1q!eDS`MK3pU>o!7ys5rtNoEqb?>X#mp!K>;0nY+tO0A*#=f*76~{x zCc|)3_<(P`c-F#IrDrO=zltdv6w-({rnD2eafC8{y|>`(P;i7n~;``ZLh;KxpDG_5h%c><=n4qC6+ekj1Av@+JY=m1z&AxE*kR z&H5QYDI56nf7eFf+)kd{;|0F-XBMC*ILC%}JoZoeJazzNen9dBBONVUkns~>osYQw)}W?q}WQ>~BTZ+=lSln4qyG6*m{fDCo(@JIOO zOm#67L6ODK=6CTUy80WyOF74*D7s;gx7o(1R8L_l{zL3&00M4Q9goxJU!)RNbMJ-0 zbY&o={l*u5+YLx*(Jwo>Q2!81(ZxR9m_YB&XF{NF=s9G)?|!JClRM1)J*gfm|R1B&ORWFs+4R2LQX&u}eFe$O8Zb zkN5m*0HWC&EB5m|805A65M@OKs>IKMc)=3DB6g-H8mkC??#3#(SaLzho*_mu{ydSv0+}`k|YodCL)_ln*6UVi85y z>61qi7N>J?q6pB8f0BYzb$7i>zJS&lbyQXAOsjB? zGgXBMHi2@kTdyKSGSWW8CVH(5rl%bxqzy5A*<3xhFNkjim>^2AKi;L0Lg`9SwI!i1 zT^$3cC#Pz=!oG#+BER1%_R*YF-aFYhgj9J(HO~4#QYa`|VN!X8+hbtWf_*YG2eHO+ zR1k0SC1>98nv5MFQQ@DG34IAf$HXWFoYkLA&Xy*o+k%(XO}1yrx4j#+{VO*nX>8Wx zSS)K_xxfiCHjEa8=?TT%gaK24;pp}+?yEg7qklT-GrF__zUDf`%+g4vAp`mBNJl$nc9<)j)0P9pBwM(MD# zAboOe7l%|nJV@0Fl+4mMwx9)%rQHOu5a-|Ct12T61SV@1?>auCfLSbng@PZ5XQ=)ZZw@G5dvpnK)XKjdwF!#nwN|x9YCnr5>MDV6 zkaX>*lou7YDDHxKSfNk)@mpFa@)^eLqy~>K7r%J)8~bM}W~)Q6)wh<7h|}ECuq*QZ z?;F*BN=}Q)d0eR%{>wb7@%HgXfS-IBNWOecTL>6Q`p-xwl8K+HH>WVpnQ%7D=Bvwq zG+M7qLj_~fwk-GDrtX|8b(j!GB<#M-xTNb(Od&Y+`{*}uTlg=XhXeGt?LdiFE!=8- z+hwHui^pi;RR7%yWcj;h6|o6GA`jmLM< z482sDzRgFXELqri!V?j$j`;$)XyEW2KmX5=bs$yGQMf*RA@TL{N>BzdUIg_JKQbD4 zJbe*wctAX3yoi_k_*;>gq|B2MnQz0sFpKPUG+sZn>SeLKUgK`EJpP^#uq5)->h1>AX`Ti8yxE88|qq`+1p)g6sjy!m`&4z4+F<`-S1+PQ4+PG zdbZ}_qSV^gd)$!>71sy@bckJBjq8VQ*AE1mr?YwOTt;tX4qqApm?!n)3~FFU!^TF?_Py)km4fa4S%sHUT89W7^G zpqCyaRX&JUlMT3guxKq~OOXo6{D5C70SKLxRWKH5Za#Hij0r$3S^m^NUI$XRmi`ZZ zy8wV$BFaf=eZ2YRA3lnuL9l&?{rPCnOc0lU1lAob$;k%j@7{DXi9GD|T z10>?M7l4BIEC))g#_r)swau}Wn(++Z++8W5+R&8v@aoYNM!Dr=cWnJGl3ME)$g=cb zquv;%*|?-5+%sliQE0&!wcjwp?{VbdB_4i^FDBz3Q6to;SV+0)w@CYC2M>Hr!lWnn zXrw&l=Xx{G77D`^lp~`?CKSN%M-`i+i!Wu10cHu`M|9(HvODrR;u@%2FoL1ue+)p{6W|XFeMSmwfcY*v?H$k2dP= zS`-yWsqVQVjrLM%_~b6gF0IrZsve|;YTfS*NMTuCni7dBG>3sVk`u?%ZBOj4;NHU~ zG$x_SjMlV2(PDTfHh<0o*e28ha&7hRfJTPoa{T~Rp4%0YVy!;4N>zc6G}2nUY`cd7 z=h`G2+Cd!>7T;fuSK(UMgQ zcxd~N7Iq#!TwyDmf>3)>?}(A6NoZmwNOd_YsH$@(9D6${}@#^#4;8O89~Dl!rW zomCNbt9(Imy^HnA8e!slbpv}WCqa(ve>}qS_Jr0<&FX+OX=R;bxgi(&Ef$w>q?YxN zKGn>3y3sy<)E;|+GxT=eL#?b2sm!ZtW;;tGhm^agjOM{>uDGpWGE@uv?S;If0oZEvy>^*b=5g)Q0fsAeSxB4leN zAczGv!izUol=-FDmEiZ7TRY+6n6!H!f54b2nU149wIMmdS#3|YkX!&X+}KgYG4zlW zN~Gd!L*;4Bem)=!rCt=%9`P*flHy$`NG;Fby-q#ZINp<*NOo)DH--rm<>UUw$cp0m zAlLZ0ZV?=DxnE_DyLAq;Vs%4LBqUjC^#p_Wm_r)=~ zVtEc=Q(Fu23x?ML|{lp_01iEzhH;rA9Ds>8@ zbfVB}zr46_T|a8wM{~wUHLA z{j84z^r$~&cL64mX6NXxt&x^6mkv{9bsL}RqymZk*QRnO{w1nYc4suJq$zmJX?Ori zo1ba;fU3%ZUg7>^WBu0qz0r*Lb(ywaPg(P_pQ)7~df5v2<>O5Gfd}C9j5eUo|4Af) z-1rigQt56lS0z$Z^IaOgD_v;@U(-#i12W1H=tFClb`0@+$2?l>LdsiPa)4&BOF#?# zrHA2)-nOwREDQCovP=7=#qfC*3BBnl)rP`QkIM#-@oF}ZW$&M(>2`n*SyJtuK^%li zn0_h0xY4*tf10+8hsS6rQEw%2M)8v~Uo!V(wcnV6D*ba4D~zJ&OHuT@jm&3V)ugGc z8F`6`w%CH&l#830@;r_wV1&K2vF*1kky?J;x!w7DIWZ$r8F=Kh(yat*pICjN2D`Ru z6w3pT*KZr7-_9v5ECGu@Fs;*FROY22XQpq#yf1E|WpT+-dDvbtAOz6SpWX*9RcBb~N%~!SfE*+DVk%=%2QpK>!e*OKP7*>yM z#*%8>r7eF?>4>9>kzWEV|T4&Dtaymd-OsJsOSx@Tct3@s!N+#}KptA}AZ>&p{>U{v3VgDtMtZ z@|lI;vYd{!df3HA=1#*{y9F^C(7OMhpy6i7m~6?@`gV{d*Pl0kd{HV#8y5_$Xu-)p zS^;vx|5xM-nIC3NrQ7KPPRaNU6s4o5+5S)JD--Yw33~X)od4(kKlMR@hyK3rzBq@gs`k`g zTWOs(f%sHQQ{+q zB9KFSEa~W?657OHqA8mIdH6!2xo)Mp*V$)r0#2Oh)j)Ple-0GmGz(t&74%8uIrr=M z$HMK$2v78H+Q~IY!pb%%V~C0a9Y3@@(QWl=O?i{UiuM}!!3JMJ z8kuahKe=@|j+vFHz0VDOS^XQF_+Ys{k98hnV;u9JKZcMQw$_*|3oizU_@N%f{cQCk zWiQFyFx9Ztlkgr2OVA=d?y^-`Ui7xC-4=rm8Y?z=5^JnfT5nJ#g~N2cK{& zL0Kt45Ae7Byl&2SVwpl4h}pa7WD^RMBKl_^OTG|ouA9fne=Nc%$48tvU%0tUniZXP zR~PPoVYDKA*Fu43 zAtC+tbBTnHnlvmO1<{U-fJPUXU)sJtyDJ)SMrpgqBW>zj?p|va?fySaFOQKQg7A40 zH>ZbdXYE~)V<%hy==JJ9o=C*Vf9Yla4Zo9dpGrXv3|p+TWro#(>hYv!g%Zir^C7~v z!fR)YC5P)24LQm6%H zxFoS!jQ9Oor)B$EbX>67s7P7B1$U--4+DJHJ-QMlJKu4+Pp)rpEs+@yqg_(8bya-7 zBaK+iBNbOwGj}8D6S1A_CRMK40WY;?YwwVju#HMaa?8R0W@pUe&G*O-4<}})VFF@_0*`#C<3QErMPnL}Ut!v*Oc%mQDXXszf zJj(JR>fMj(`$5=QpJ&fd_T``h&1qm-RwdT<7wJ3IwP$75fp#6$a}5#N{wj4MU`M%z zp?1xKYuO+|^fj6Pn1|4-6ZKo@54WtSSe|ek^Ik^Faq0D$`KvrV%NywF5O$)#stPe2 zDf$IO4;}^xsa)=I`6jyl8g!{x_brHe(8foxhFRW*2gnZuRzXxO&=~u_C~4Y{m9$;_ zsR6WZJX?g!zpg?B*VW<~zxukkK( zyuCQ_qetkzz?_$PpuxAx&=P1>yvb^NFzLxvkxL(yq)<*W{f!s*By7>tZsOI#3GR1+ z+Gz9dgUiUB+7Rjz6RueMvcm$tI-T1IvPdNEAy7f zuZEPvGbQh@I=MRH{9LmI#hHSF<&9Ubl* z9Ox;SbdHLq#-dpFv37uafYEOM+CA}=HRItzHoIk_Je7%i_uqe{00hqTsdGN0^kR50 zCVzwLpLL!ee34;iU-_#Qq#ybu&syK02qZsJ7SZ^Hu$dHByUBvuKw=T?lqQo!=~r-l z!ef8JTsnRItjRISEN^Y|O)dFxq2f-g@;^PR6wUP$YC}UCI5-CO3fh1kmw6hPb)b{M zM%k;Qa8&$$sKsAS{W)RLqRmspkM$;t;#}kj23VfNXAQco0t0YAeTmiU_@ooFZ^pQM z#QtRQ;K%+$Qf9Bahm9`XtDDmbv7VMTLqL;EH=D~}}pX=W{~{$KEqq+qjclBoMW`Os5{h4|?!C71d;-&KVqEv;l2 z7u(QLw7FjchwXj_P_GJd!7$Z&c~ptJ-Oj?@B%|J6tt3T>R*O-s)E?bP!p~Q(#@5R_ z`?5&}`f0|aWsUVst9>gB3Bwn%-Y{fCOys(=Nf*p$)fPpvG|8}^+%)@#JN++TV?bFSYEK!1SkUAW>^!pbk_rx z`NL(X4VxH71k3Rz?YhQAF8a%)w!4R$=oa~YrCUII!I8_`meSA!7IMAEaBHgPm1kBW z&~BO>o4&3IfH3*H_lup$vO=9~ffnb($Th>IUadRMzt?}wzsLWqfw}Ng=6*EU5t2Og z261eP?|RZ_0Rd0glez*OEmgBPCT+g*O&`t6K5!RLj<;4dm$_zfgvy}xL<%Md7IWFA{k`|!)iknUzS(G>s`JYt#%9{Gef>_zRDKz-0RPCuchst#L#cd zTtUpNn6k($3r+c;Inu2i`EuHutbN56NB1}hVNng%0V6kFEdFsVOq5+6G05EgNaG3O z3Dd7;5yHTW31uBI_NFUQS(C4*C)s`W3g2h91Dyp{c%VJ+MX}??70F{bODkWq%0=|{T|>oJ)bK( z@}xCkH;a@Y>us*i9jP0Azd9@SmvAI)g6F?)Q#B_2OGcKf!2(wbER!n}x6=9{QC}|s z+tUUS7i*S(#5duxaYG#T?ZSp>*V&x#$usejDe@!V!(V-DMP$7VQ<@%ovKfczJqh5# z3xCOTlY_rv8g53xtIvkrhWUI`DsGv1xNK@+TddL@!?Kn%R!eprEZuK_|6lEWXH=8h z)-JF&qN1QEpduhbK!kvs-eaLx5d`TdND(Ol(nDY)BB&rm5NS$PsRks{Lb1>^7x+kEed$`Np{8-aGF3DJE~$n(tb3%{AxqJd=q~7H2e-lE{Wh6<==q)S$y5 z<2CC=jhl4qa83>!bGiSETYU5-=Rxhrm*rbmTJSmz{a71bV%v{vVmA(Yz6}@s{-@LJ zCoM%?q*#sk6YUzuLFH%Z9t^Bm4#b!pzKG)ujSzC>$IzuqA!%lS5c0}>2zD1iBZO2? zncDJ6KJ7JA5mH%{i-a$YJ6RwE)x;zx(6HLq`(dRmx= zx!;)vbdZkVp`EK;Dmd6YGub^IKMmg>ZeY>(V zGlyoB`Ugf*nH|kZu`y#fXedu-?Ttw-=&~D@5hc0cWNOmPZfJ2aq=Wg#153FJr{%>f zzWMw%WPzJG+$D*y9pBKeuNXuxStAL!C9{KRt-5)Mu7xZUQArP6XPpm*O|VmbpCjCf zlRd8hh4A;7t|PLGx9=B*A;8z2jRq`_fb-oJUz6VNHDe2Rygh%=B&xwIe-G8{`BZiZ z>Spa}Q7ib^0cP>K^XlwAA~sVRC&OI^ohE$lK86dVd3DJ`!}xja=G+Vwawui@y?GJ= z0Z~f9H`eWotRciy)t-Etw5t&PYC*u*&>b8U5%IBvv>C;l80EUbOm`^t3UgP_?eh=NICnvdQS zFKW~p@CFJCB?Hq13jC&U!U<}%@g}3g>-|b*uX0|VlH3`MuLUb<{U@koMZdiDyzd70 z-RB;jS*?1eiu0d@KVi|8+3lWRuVW$sr8M0>QmQ}slfg=x#+SQJp;hJD!QT$jJ^Gpd z2FK=Eu2XfP!S-W_Gt6|Fzs~#1E)XC91&&ST^yUkt1G*Nw=pLwUAG)+~;@{Vh@Yq%R zJ2UuZ{Mld5?*IJzpWEYqX6C>CmSgpltc)1AXb0%fG6xcitf_P5sG7pSOnOsm|M3Zx z)e6ZrrBb4bMk4|TUrj?$)`u?KFYQdbpD1KAxf{1hNX`%?P9ud}RrvEN$4sV68BP63 zsqXbBlAeD~*-v+1$3Kxw(bUYMRdDOB63^aKJI-6X6t2^Q*sK(hb7?%@=norQfYVTD zvzG4JBFsw~VFI+{?;ZMzg@H{^eCWH=R?`Ccy&o}))=}7T42we(c6&Was!_d7TyOd; zZq2zJ_5Vf}a(xG!vR14~Adi)blQ}~W-zH=!J%}1m(GiDR%o&yxQM)VXii=JkQW2@C zcQ{?AvezTbw7M_!a;*g&9skZ^KOWfQUfmf80hc&s2>>0ev~L)ojzuvP2-<`URI>wk zV+jBgY=z&^&_cQ?2jm(DTx4kahh;YzxuG=rK(e7V%T9QRsyk(TG<){UHI1UeQCc}i ztwhD8Dp6TDc4e=X@>FSQ5h1D4YrKqwiU)Nr42|mRfAz_`&Ta)g!VhcxAc!6?AT`v|hp7KXjCpmuO5oPZQXVAPs1Nw-9P7y;1GbF`)Pi-BGk zBy~#K54A7-ZEgJ%c_zAqzt~4~QR7*b>sa6PHB>R()Q^k2J+AErq^0@f8&8gre)n4( z5#m<1nsngpDP;*v{H=xnC!~yeWrq_ieV^a_=R_ z-t@Ftr9o&w?pHje^c?On8^(!zh`0LaE(1MzJFhj39{=4P5*-%0_P*(uSMIrK1I0$n z73|}}!gU}G(ZR@Rd4e@~+K!i4$E0E#W9?a^Jv%cU$r?Ra`wXOTw(7Y@8P|#*5FuA8 z<4SMRC+4J+O?ncpzUHw{3cOFq)3b&&M~$in7FZSbk0UoT zYOEL8N8)0WbeZXFm3F*xV{6esJA)|md(FyfjM%e|@V7(jejuZ8-WTm(=|z#WdR?8S zSjewnS(ejrQoD)0^D5Kx)7g;sD&Jr(%X&}em`l9AL1e?cZiGt8M0k0V%~>6D+~d&~ z#K){m-Y!m8_xS_$s;HHhXYM)?>!+ka=73*3nS-v*Z|8~>(_{KuLw`}w)g-I4c{+7 z8~HqvVSdK%Txn`n9{*&AFFw4wb+2za_l$&_8qxSj7`$XG;Gu9GrAa53@h7C{RNd(H z9#>>%sSCL7tcw7x%(EJ;s#Y<%t*YGW&4wpIdP2=d&+^))?Wgx?n0_h0myE}B2=C`N zh$(`q$$9*VS`wVfg+gf?E6wM%+@lMI7aJkIapBH~tk=E2P_StXsR`YYT zB~O_}i{W>!;RPQt#an`sQlZ|#0Qb>geQqd5Ik9Boq>VccO}@+JRuXnAeLpguBik{X zw7sF$?WRU~;h!vYRTWV}mx{m=m5r^I2~?#&HtGj9 zdY;nEc4oKE1uJ3oh6dxrNFZ^yp%R59Ck5?J%xN`Zm!@}&{Sjl?JA~;!m00NoiNFUw zR}SzN4)0Ld)u(tax`-P2^u_Hv_r;6~d2{>rr#dnTLGe}JFp;b>9MsO1#zg53?B(_6 z?-E`m4{JaaS2e`!h2TbCEf4+y)=W=p%PY{*Z;Y5*D z6%DLHgW&@5tAX+|jr6y5LOy~8Q1M^;8nHUv=S8Sl)jmX9rzNKWxip<7 z(6*RCB>`o_+KsMa9tCea9-AeOUb}{x)c|q%V=embj6V~7?|F|j@**s6%q5|ha>Rq@ z?=N6LHIMF#idoHlam0EnfN}K#a_KryhYMOv!Hx0K$=+kI%%~OtTu=ZPZi4|z8%@Cv zkW0y(Mh0XE_;SeOlOpSYjS)P`g_H9fyH|z-%G5x+3J8K7TJo~>k3X&)VEnYC`YQM= zT>*z#b87&F#=8YT@*4B7=ScVE*Q;s{CaNP(q@Ycz`V5odf50^V#3# z&ks=9yQykNo?Zp!qj7XSM(RdmU}$%o%HA_upUdX~u^+H#v&FY9+Hc~DNZ0Du2;SjR zM^?rsv`5`}bUCKrhfUD@2e+XZ8BnGI=xt{4Y7YPk6#^Q5u^K!TM4;jKc9i8W4>jxJ zg$1XwhSJ2YbV1Y%NR=@_$1jXk{ty(R?oDtkFgr5-fPqH!E-Rt!kg&d;>r;VJ?O=0`p%P&x58dOvRC+(Zy*kkE5A*!+j@p)m zm>;u2&%4$h;5p6hXRac^-U{QXPiR=HhPW=e3jq}N=Bkp}T2mIF z^y*KtAcyUgOi z)Pl6H3>fXOPAL2#V=RR@(gr zh63>i4wqPj0!t#kDC5&RY9&fE41Bv}7tF*_ng;cKwjS-Y7l~8>BBH=$(!^F~GRu() zZQ3b%R6X~N3s?+Bx<6`yGEu(>XDD!OlsRRADx;&Kgjh%&tGH8va&t*-!{j`hwRIbc z!M_A%v!%V1x%8Y-JT*ZD=m>C4xy)eF7(}s-@3bZ{uBH#vMTj_fPe!;S`FrGcb7rgtC*+vF0y`$5KYRJMhY4AWAH4e}^YASfCbF@|V+FUQ(8j@G z>o~z2X%x7T-okNYfPB8EtMSe5aHg5o;@U|cxJWyGw5!a3h7NUwoG z0p|}hfih_v@b^3zjIPbt0R@M^6Iu#;WG1l?Wd0d7Y*WWigf`8wb%S~g&5iv7j5cPF z@okm4`YHMH@8JuFc*@8^N&wH?*seMG^bMT`T-ONcRa+?E_M>Oz?IeF6y(*Br4N^~0 zi-=~kX5S;OWy3>RIakYV1~RqFc?q;Lz=eH#b-K}GfyTI z%kUKJYdwA(8G8I%>8kQISuYj+&IjObf+3fGSIW1E5wG*SS4>72ASS8sb{*iK>b{og1=s`bJ1;aT+GP6EQYV zr3}huto0jJCi6($(3t%CU8D}87^A}3h32&W=3U`EffVtd(Pg}1bCOH7@p1NN$tZ+j zW^7*8?c7emEwr{eSVNC)GjE*`CVz+5cJUUPG%(`)Sgia!MlHrAc53R(mQ5dQ#IT%= zW>bhWDfq%g{5TQ=1)~mAL@^rpLU4Dn8&>)&94adb#mixX3k(Hq{dQ`0_jzKo25=1A zHA>o2p6fDXr3!a#*KNG^=590D+HJogwl}t=bgudGxC$Q)s<590BnUmV_Td-T)pMkC zfpWB8;TC?pgOat}JZs5oxH5mL@AYJ8`=LEY2mN~sl>+AtYHPMu!R{_FG2Gc-H==Ly=>aADKa zYBFz4<|yNnN8u5hC+j1Qtz+ST$H6=^(TJN5W#aK0;igW@W;Hst_`CZPxHHzL$*a^J z6lJMc)c`79yJ10HpADR?8Y!eI1t{6`<$ccsnC`YXOaOCH&*{6)VAAb3ccwSoff{hL8ipPv29MQXjW%B4zYr=HP|QrQDld45-S($tJj5!DAQJ}q8_jI z@ZAwTvlExNn`Q6sm(Da!aP5K1DNSi~uj(g#8805HP+EA-Ro-S?l7HAX5^*E@&00_E zFxRB3yh@m!yGK~XD8YYD#(KC;06@DBkr&TJ6NeG&yr)16)$Xt}E3r>g!Fc83wHaa? zDQ6(Fky&yfLg4oEb)8zD3rla+IdFD9vjyp>XLQ6ob@SGdLZ{-l!z;|yZ^1A4U;cty z9C5AgjIQiVTUFb}ci#gpaAD`odiY}k+6eAJ3w@>}VqjJyQJk`nY-7%|H;*tB>RM^=^@Zk#k0`+e1!`4Y%J$(|Z znOZt0{vw-z5098lNsLP(+Ht|4@Oj*|V-t8jg$HK1YrqSYpV)Z`Z3(3~3Riom0l7xJ zdKOBR3TV-){L-dAa305IM15{m`CgRz=ySI~%6|jw9gkNXOURn~#yf@qWYy=aO@DmGy`Q zSXD=J0SrJ;Lha2rB-U7<@|CKDugSxkgBScc_@@NQyiIVQ#wudKmC1TB%T(Q9SP+Xq1E>6jb+H>3a_2w%PQW#tM5 zo90*=e}EfZ)Z$Gf&aC4*;zev$Nh(J zRo})DYrQD)yb*3WhN8D*EaRM!EPlzk{ZGfF^z!0<$Qy@Wu-~6mGMi~|>a?yn>D2;8 zxxj8ueA$tunGS!Mfm8O{Gm}ZvO4ED+u9|;`{T3MH>PtCY`3!5jWO20A2(>H4+UGZF z!ScY)kmJxvtkJG~9qmc@sO*@8<5t(Ghfjj7WW2SNWL`5AP<3SmHd4D0<@UclBLbbKS+e)Na=451P0Hz4jc-WR`o-)0Kvev^zPQ6mz9msN@ za*tbAOXIUj3g9N_Q!q2jEtnL+9r!oZX<`=k_I6%S8n-U)7MU3oEZK$%S%e1!W-2rc zoRM4!mKP%tOZ69Yyi=yf@qzx$y`<3a{iN5|jWz+`syJ<|9yr2(`e=g?$Ir)iAmGmS z&yN?2QBLuUUH|~nlM|gf00z7{{q|uh9#gtuyu`_Ytzb?&P*$Fi~y(v zj4NQ~JguUW3Mw3-b!@-Dz#~~?{cc<>vZoL~_R(kwlf9I#T5=6;y@tEL2u4nBqb#*i z)dR$}kf>`b!Mp9|2#Kc@_FySYDb~1MVVqLh0l6^JYnonbKMXc;IXdi0*ngr6YJ$Lf_iJl+O_-wLn= zGS92Wq4!)Lz9x2lcpb!59&?uux8a!NMyR%AHAQ~+(XSQtrug(VzbJ>B%yumeZ?A(mn}51-ES2)^zLFV3FflSp*G`6;HTtobQ|5roC@&A zDcw1o?q{c~ zMCVPFu`io{q<-*jO`a>16BLnxR)e={%HL>lp`%oTgvCR&a;WpyBqHbHhc1p=MQiy`1$f$#mk;~YJXZ6`F6&+e>1{jFGQH{T(ktG|`v zaHgI1;PLhhI~I}Kzn#a?{du(IZG~-j9_;~w*|hA-|I35gG}G>6`yHcfXMy5&=D(f9 z(gI|t&8cn~|GXd|8__afz|?a(C0p<4U)oyoH3KQXb~%H9ong0L^9Hx= z=S91MP8{=a*upUWWkYY)K(I8DE+XM@9uQM`ep|`JIHoaUO@i%VPE5G`B~-d+$Y13+gSIcp@pUh zw_a;&PxbCy(3@ZJmsC+!t6%3j&;Ovww2x+(FQXIm{tA8W-}AUuStCbWcbQpx^Ev?f zFw$=6-Ny96+dii@akzANkqD&Pa||C?dd0llPl?K4P}0cM>NtmydWiAAEMC{wTK2-Y z_Sxos5!ha;pDA1;?5FF@g?5>eDw9P&hm%QqtzNH6`1kur7Fxj8>}pS>Os2aozRqIP zcg0V!V|i4s(u>Ihh-%=XfhAeUcldU*BIS*WNLG6d^p$T8_hp_)73s%+1g#VW%0#Th zoskTi7`KT9_SCrWc;9e59Ae3nWJ<1s`PuwKAUYr1%WZ2LZqHGjUSHCMzMBz+yXt+N zxAM;65GOcnb;1Fg-l3V(C(3LE!RIrDz2U10<%sj}=GFxSdAT-)_}t4sSYaD4d8~;$HGE-%AXb-Q{@*Y+i~S4 zc`|E}r=6a@5OVsgIkjQy+T;c_uk0|hgD}A9c5DaKI*0y*4eg=h%{=`T3IR@m-zfe- zDHomHsGUWFq(>H6`JLfT!Fa7a$c&7W6G|V>FCTZ97_4|r{2sdLjh$RY9mM5s5156j%<$E?g>7$+e znj3v09s!+Xr&5OT^RZ@4F=q!(J{P&&CwML8E{^Su9n(s97jud7{7s>wMj^5Ws{#RH z%))?6-l9^aA$y&Px5l#fkc~Bcw6%(__Z{bnX)X(&fDVqC)HTpt;XC#orZdB9%i-?X zazK6BoVMghd~(YTEeB{_-`*SdRkhyDTVx&@s#t7jsO)l}>BNU0wiOD47^Pg1GuejP zqnn;{F6=207(fr2fs*e^&v$+z9VMUPmWeW=-up`nJL=`&kCj z$f$D(4VBUw^xc09SWRkjTnd3;vVpWYXro|)$^~r{l!hioW)fIHb~K;@GAZq;KUjNq zvgoGvcgw$8&E=JhR|W_TFv??^Gl068P8i01$*HyRB=JnCR)xBbNTkoXgfdUjJi#>> zT|)78ygC80F73YGHh+_???mcb9#efjg?aSi>FSgE_N+c_E1oV(*VGWg@p@865H~9a zJf6aZ@HSu2%wv{rdd;aio9CG3_PGXFG}SQ#E|%r2i~oH==BF@k1!9*zC52H4{Pk57fS^YxX`eybGdf-p(SFM zZloaeA@`F{cPTwj_KLp%B_cxgAfQddw=xjVOGrH>k+bkp&Mep8#fhbaCLAb zBkyj#ShLa$I@3>sAiwdrb!1|ZcIuh|IO0|%fp(&IpC)~xl^`U#e*Np_N%ODH`G31= zk$M;L+g3H@Up;m+d~ivrUHX<)=V~q73`}srn}X zy8YKEB%6${{Mu&Y-@RJ9o`yAI14;goUHWCoPEXBUYbgZEAi{syWkOL{ueqSelHMox zIv-qX6(sN z*;7{3zPSAxNNKXi>;oIN<~?G?x597EGxR4X=5UP6`?g*ZdbPpu6!cFp8yO$|wo15U zM7BEPYvMb0`PXR9Sqb^6i#pnqb7jdclTr%dvNw8rk{ZiP5^6(}q|EwUrZ=o(h+))4 zsvuLBIf{Gjz2_k6%dXn4o z`tnOP=u|5)1@mC|5qJUIS1aQ|vjK?=8>$OV40WzoqDBOyvK-TV&oxO<6ohM@QOfKI zK8kBj3*^Npu|%FGma~Mt@Rh4~J%K%TSlu8AwkbG1)t3u>%* z-i(hDD!92cFsEruM{<0}e|6|(>xrs;U5rLHk3BO3_2Xwxb3eBC7&GU}d~D-SukXtP zMW@Lp$#qD`EmRnJqMVkV!DXN8TPb9NxdmM8vu@0AJDQd@Js6Fci*n+S8{mWZ-k0=* zzelT-YCIB&D@U<>+rXbX5$7#lG(2 z>_=&Vq_2d1M5Lmb`>vE!15QXm~Je0jMOy}k+4G`0Uf_-)?(>WnmxS;c-T6L=${ zrd4Je)!hh2ynNAE2W%00VHq2GA9Wr$7mu*zg1Tax%C-2}!A&%`MB`9<(qB;Vf{Hp4 z>1eKEf~O-G=R5(xg*A-Egp|dpnRrzHy`|Vk^`VdRHaQ1;+$qZQ^@^@@ovF^kk&+WS zWJ#~N>IQz#8*%vZvSw>!z4K9O9(kvrvUMwI|0`sC|43<{J{xG5pp$vC2iZ&moKK-P z8zuOMa*X)kfZ#8!vrzR>t`P3Y;1sK1!4=gKiEqPdw%u=nFEF z?NuaR){|+k&Dwi+OLfYbrG^*!h%!hypYS(5CPK}^#1P0?>1{Q?vij zP*-MR9yUBtblD960WqTctqoHUJ&uaUc=Qg8)U}MFUdp>QElJJr z1Ac*S9*3TeR;oPjy4akNpS47_IQpC7O6t57*40^ZO}$CKbqzMtb9(2}OS|>O>6I}= zXNtsmOLLgmQZ{-KCcZp{s4<8Sy;QJP*#m~uXv@4m%%7}4`u)pL_42F(_CV@?y=l!? z=ic9<AR>{0^F1^yvUe*0DgLTKR51-PuddYA7Mpc=#@A2)%12>JJ8N-lLerUCXs zf$C;Qgy73pDmP9>T=An%Y4O59^z(28UES=`bP z>aQH&0immx`Chw-M{c9##Sz3yFV9|`|61Hda+Iz#ZsAc-HC3a?z+=gdrWq@5`L4Fc z#YSkwH@-Q_Q3QG*=(HOsk>pvM^>vz?G(JYd0_B&Ug=L(Z3{VjD(NR}f9b)4a;ZmG= zdS-&cJ`Z*wHa23&!LjRTMJ|DREF(#<+Qj+=RsLF_;dFY35zp}_@eO7(if`)wLIEP} zLmvdaaT2l#)k`Y6OoCi@P+cPc`w!R~ATyrl{qr`xnN4Wd%w(MH&m9xu0hjOWUp@VS zcFj|Dd>gT`)Ot~ny8$xZTM3uVjKi@#v`j?PlVA7EZfAkb>z&=s!T4{7Kifc(pMV9A zW5IhkXsMIk|4EbpEBu!+;s3x=|7A+$-_6O4NNtwpl7eUM;_Gw1SEH&|quYX30C#`B zEm*Su*)@Ba*}tS+yh*D#z(m{VsAW@@RsprH?D6Iv{BGiG^K>b{kZYe;`sXHQL(eP) z!0Cz;9n16{by-mVoZC{Px|?q&jc|D65ig>VsZ6bUss-0AZm(s9Z0TelCJZkb5}!@m zM~}aKaCIuF9Jlz6Q1SI0YG!Rz5lzq-=2C_v?_lw<=fq0rh^CgvPI=x>L4-eJ8RhK# z3H5)JzAAQ|Q+Fj?Un9Y z0ha4#F2l5ANm=J-W9GRhQh`}A!Quzc@BX>LqC~TP~{qv4V_bI(Nz}BKPr&V0;=9XvfZn!B&_- z5bEgKgA{_a_dlDmgZp%|lP>ud-3katEXh*ecOg6{tQH#1L`d#GYfb5^n#FQP0Wp>= zX2*Utzi!@@5q92GFGN^<;O)8h5I{-5Jv{xI-&d^r$*Qf5y8hGm;&m8G8rS8F$}w)L zxs6D1yK5%w!iHGiTA(N-0*D6)4)qoSf!oiPB=q zjcGG}Cl!`K=gvdQ&dPJ?n;s45zS`#bY?WGt%NUK%`~{akRdaPhsf?i}mvUSkI3kep zVz&6PZ=kdzEuu=TP3kzP!DSP)wY1e!;Oir0YoL2lq)Te7;!!2ATESy6I)Z0X;?f+2^sJxMRP7Rv^2+MZ8-uLW zJKf=%grpFx?%TtBVHY$Mu3?Rnf8j-Kgf9 zi#`D;zfPTIWr&z%&_G&D+rr)w)g2&z^MX(M40|8T0oTdZJM~*g{yo{;?`TN=4q4|o zAh?u~SYP!)e*S>tn11Sosh$8i5u#uV58RMYAD5OFFBth<-hM7qPWBc2^aH-3;aYoI zv(Yzr?YK!xA5v@8I}-|GZhuG?`~CJ2h(;t*n(<1U)j}eT zRIw681NNW!v1c5cmS=QKJ)Or&=bqaL%w<&fDdL0lWUEf@hYE{b21?muo_X``oldFx zNR1eu^t7lrAW})>i05=*o*PlSKU!nfD;Oys8ou&!~} z78=m}8=N013}=k4?!&IE=n}>Hf>tm2RlEN~v)!ke4ex+#U~XtJ;QTYTWHuq(7Ia-l zvs!pl!+E`Ouw8jk-5VH*PTq?5vp(IJlFl@ju>)}NGL0CqocELLVXuAvJZ?qhmoj|0 zo6{=S941oACD+EHZ?3r##fl!x;GnwA8&n64^{qv)#CQ{j?DINd0Z%-nr>bsxOi-F2 zNG8YAsrMz2bi^c4dvu_1zu+^Q6^fSwcc*hd;T%{ZA^@GdRm&J)z3+bh$KBNv;5D%W;miNvUjJi*|DW;C z(7HCI#ZPEJlbG%+1#Pc@?l%zjMzvM}WhuJ49|2wY6rnBBm=?VXP%ZyE3Go3yk_eCl z9}eld)e1$?I;_)r$AgAUE3-p^BXyzgfXp+%x^H#2z7%2u^!9=Bx$^w`LorGVO+c<3 z-pK76v=E;`dM~6he~X6X7r8cpNdt}QD*?NaH)yUNj1G__j6hSFEs9@qH7^jI_F0?z z`Wq8V6LD+{j^74^q($^-T3U6l-h$tst))`h5R^p#s3-q0tqlNpe9%RV)~;wrJ)Q9i zVz2oyUwbGof^_R;z0F2@5_;`}c#9&f6WCdz{jwOEG%gNX>9qqSi7~)*UHt4G9FL%* z)k)zCMS#<=21pWAK$1`! z+Cs&J7E9X?%K4QcIw?U= Date: Thu, 26 Sep 2019 10:56:24 -0700 Subject: [PATCH 27/52] spelling corrections --- 1-Draft/RFC00XX-Update-Error-View.md | 101 --------------------------- 1 file changed, 101 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index db14082f..52918b63 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -20,17 +20,8 @@ complete detailed view of the fully qualified error when desired. The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the preference variable $ErrorView. -<<<<<<< HEAD -<<<<<<< HEAD -The addition of a “ConciseView” as default that contains only specific error -======= -The addition of a “SimpleView” as default that contains only specific error ->>>>>>> Error-View -information producing a single line on screen and in logs will improve customer success. -======= This RFC describes Changing '$ErrorView to an enumeration and adding three additional views to improve readability,'Message', 'Analytic', and 'Dynamic'. ->>>>>>> Error-View - Message - provides a concise error message suitable for new or occasional PowerShell users. - Analytic - provides a refactored form of NormalView @@ -50,25 +41,6 @@ to remove 'view' from the name. The view list is as follows: ## Specification -<<<<<<< HEAD -<<<<<<< HEAD -The proposal is to add a new single-line default error message view called ConciseView -======= -The proposal is to add a new single-line default error message view called SimpleView ->>>>>>> Error-View -and add a new cmdlet (Resolve-ErrorRecord) to provide detailed error information. - -__Key Design Considerations__ - -1. To reduce confusion and improve debugging success, -<<<<<<< HEAD -error messages by default should produce a single line of text, including the word “ERROR:” -to make consistent with Verbose and Warning messages. This is added to $errorView as view named "ConciseView". -======= -error messages should call WriteErrorLine to produce a single line of text, including the word “ERROR:” -to make consistent with Verbose and Warning messages. This is added to $errorView as view named "SimpleView". ->>>>>>> Error-View -======= The proposal is to add three new views to help improve error message comprehension based on user needs. For in-depth troubleshooting, a new cmdlet `Resolve-ErrorRecord` to provide detailed error information. @@ -78,25 +50,9 @@ __Key Design Considerations__ 1. To reduce confusion and improve debugging success for new and occasional users, error messages should call WriteErrorLine to produce a simplified message using view 'Message' and include the preface word “ERROR:” ->>>>>>> Error-View - Simplified error message syntax from 'Message'. (See graphic below) -<<<<<<< HEAD - + NormalView - + CategoryView -<<<<<<< HEAD - + ConciseView - + DetailedView - -- Error Message syntax for ConciseView -======= - + SimpleView - + DetailedView - -- Error Message syntax for SimpleView ->>>>>>> Error-View -======= ```powershell PS C:\> Get-Childitem -Path c:\notreal ERROR: Cannot find path ‘C:\notreal’ because it does not exist @@ -105,7 +61,6 @@ ERROR: Cannot find path ‘C:\notreal’ because it does not exist 2. To improve script debugging for advanced PowerShell users and scripters, a refactored error view 'Analytic' will be added displaying the error category, exception, code line and position, and include additional help for the user. ->>>>>>> Error-View ```powershell PS C:\> .\MyScript.ps1 @@ -150,46 +105,12 @@ First parameter set + specifies one or more of the newest errors to display + Not required -<<<<<<< HEAD -<<<<<<< HEAD -Examples -======= -__Example__ ->>>>>>> Error-View - -```powershell -# Displays details of the last error displayed -Resolve-ErrorRecord - -# Displays error details from pipeline error object -$error[1] | Resolve-ErrorRecord - -# Display detailed error information for the most recent 3 errors -Resolve-ErrorRecord -Newest 3 -<<<<<<< HEAD - -__Example 1__ - -```powershell -PS C:\test> Get-item c:\blah -Get-item : Cannot find path 'C:\blah' because it does not exist. At line:1 char:1 -======= -``` - -======= ->>>>>>> Error-View __Example 1__ Error occurs in Interactive mode. Cmdlet displays details of the last error displayed ```powershell -<<<<<<< HEAD -PS C:\test> Get-item c:\blah -ERROR: Cannot find path 'C:\blah' because it does not exist. ->>>>>>> Error-View -======= PS C:\> Get-Childitem -Path c:\notreal ERROR: Cannot find path ‘C:\notreal’ because it does not exist ->>>>>>> Error-View PS C:\test> Resolve-ErrorRecord @@ -197,22 +118,8 @@ PS C:\test> Resolve-ErrorRecord ``` __Example 2__ -<<<<<<< HEAD -<<<<<<< HEAD - -```powershell -PS C:\test> slkjdfh -ERROR: The term 'slkjdfh' is not recognized as the name of a cmdlet, function, script file, or operable program. At line:1 char:1 -PS C:\test> $error[0] | Resolve-ErrorRecord - -PSMessageDetails : -Exception : System.Management.Automation.CommandNotFoundException: The term 'slkjdfh' is not recognized as -======= -SimpleView of Error message. Piped error to Resolve-ErrorRecord shows sample DetailedView -======= Error occurs in script, shows error from view 'Analytic', and then is piped from $error array to 'Resolve-ErrorRecord' to display more details. ->>>>>>> Error-View ```powershell PS C:\> .\MyScript.ps1 @@ -235,17 +142,9 @@ Display detailed error information for the most recent 3 errors. ```powershell PS C:\> Resolve-ErrorRecord -Newest 3 -<<<<<<< HEAD -PS>Resolve-ErrorRecord -Newest 1 -Exception calling "GetHostByName" with "1" argument(s): -"No such host is known." -At line:1 char:1 ->>>>>>> Error-View -======= **** Detailed message here **** **** Detailed message here **** **** Detailed message here **** ->>>>>>> Error-View ``` ## Alternate Proposals and Considerations From 46b238239eff8acf9c867ec60edd8b7eeaa6e974 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 26 Sep 2019 12:44:25 -0700 Subject: [PATCH 28/52] update for a new pr --- 1-Draft/RFC00XX-Update-Error-View.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 52918b63..627bcc69 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -41,9 +41,9 @@ to remove 'view' from the name. The view list is as follows: ## Specification -The proposal is to add three new views to help improve error message comprehension based on user -needs. For in-depth troubleshooting, a new cmdlet `Resolve-ErrorRecord` -to provide detailed error information. +The proposal is to add three new views to help improve error message comprehension +based on user needs. For in-depth troubleshooting, a new cmdlet +Resolve-ErrorRecord to provide detailed error information. __Key Design Considerations__ @@ -174,12 +174,17 @@ ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: A __Alternative color for all errors__ 1. We could change the default error message color from the current RED foreground and BLACK background to ?. -2. Differentiating errors based on termination condition: terminating versus non-terminating is currently not intuitive. We are examining differentiating these conditions on the console. Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. -For occasional customers, all error messages remain as color Red. For advanced customers, they can change non-terminating errors to another color to separate the error termination type in the console. +2. Differentiating errors based on termination condition: terminating versus non-terminating +is currently not intuitive. We are examining differentiating these conditions on the console. +Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. +For occasional customers, all error messages remain as color Red. For advanced customers, +they can change non-terminating errors to another color to separate the error +termination type in the console. __Alternative For Error, Warning, Verbose__ -1. We could be more terse in our messages and increase consistency with verbose and warning messages by using a single letter to identify the message. +1. We could be more terse in our messages and increase consistency with verbose +and warning messages by using a single letter to identify the message. Legend: V = Verbose, W = Warning, E = Error(non-terminating future), F = Fatal From b2f46ca5526f4739a23b85eeafb2a7e0bfa129fd Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 30 Sep 2019 09:21:14 -0700 Subject: [PATCH 29/52] update to reflect view changes --- 1-Draft/RFC00XX-Update-Error-View.md | 71 +++++++++++++------------- 1-Draft/RFC00XX-Update-Error-View.png | Bin 40639 -> 35199 bytes 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 627bcc69..08bf1455 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -20,69 +20,65 @@ complete detailed view of the fully qualified error when desired. The on-screen experience, when receiving an error message, is controlled through the views NormalView (the default) and CategoryView. These are user selectable through the preference variable $ErrorView. -This RFC describes Changing '$ErrorView to an enumeration and adding three additional views -to improve readability,'Message', 'Analytic', and 'Dynamic'. +This RFC describes Changing '$ErrorView to an enumeration and adding one additional dynamic view +to improve readability; 'ConciseView' -- Message - provides a concise error message suitable for new or occasional PowerShell users. -- Analytic - provides a refactored form of NormalView -- Dynamic - provides conditional switching between Message and Analytic. +- ConciseView - provides a concise error message suitable for new or occasional PowerShell users +and a refactored view for advanced module builders. If the error is not from a script or parser +error, then it's a single line error message. Otherwise, you get a multiline error message that +contains the error and a pointer and error message showing where the error is in that line. +If the terminal doesn't support Virtual Terminal, then vt100 color codes are not used. A comprehensive detailed view of the fully qualified error, including inner exceptions, will be provided by the `Resolve-ErrorRecord` cmdlet. -'$ErrorView' shall contain the original views for backward compatibility and renamed -to remove 'view' from the name. The view list is as follows: +'$ErrorView' shall contain the original views for backward compatibility and to +lessen this breaking change. The view list is as follows: -- Normal -- Category -- Message -- Analytic -- Dynamic +- ConciseView +- NormalView +- CategoryView ## Specification -The proposal is to add three new views to help improve error message comprehension +The proposal is to add one new view to help improve error message comprehension based on user needs. For in-depth troubleshooting, a new cmdlet Resolve-ErrorRecord to provide detailed error information. __Key Design Considerations__ 1. To reduce confusion and improve debugging success for new and occasional users, -error messages should call WriteErrorLine to produce a simplified message using view 'Message' -and include the preface word “ERROR:” +error messages should call WriteErrorLine to produce a simplified message for interactive CLI users. - Simplified error message syntax from 'Message'. (See graphic below) ```powershell PS C:\> Get-Childitem -Path c:\notreal -ERROR: Cannot find path ‘C:\notreal’ because it does not exist +Get-Childitem: Cannot find path ‘C:\notreal’ because it does not exist ``` -2. To improve script debugging for advanced PowerShell users and scripters, -a refactored error view 'Analytic' will be added displaying the error category, -exception, code line and position, and include additional help for the user. +2. To improve script debugging for advanced module builders and scripters, +a refactored error view will be displayed. If the error is not from a script or parser +error, then it's a single line error message. Otherwise, you get a multiline error message that +contains the error and a pointer and error message showing where the error is in that line. + +- A new property ErrorAccentColor is added to support changing the accent color of the error message. +If the terminal doesn't support Virtual Terminal, then vt100 color codes are not used. ```powershell PS C:\> .\MyScript.ps1 -ERROR: ItemNotFoundException - ---> C:\GitHub\pri-errorview\RustTest\test.ps1 - | -15 | Get-ChildItem -Path c:\notreal - | ^^^ Cannot find path 'C:\notreal' because it does not exist. - | +Get-ChildItem: in /Users/Username/GitHub/Errorview/script.test.ps1 +Line | +15 | Get-ChildItem -Path c:\notreal + | ^^^ Cannot find path 'C:\notreal' because it does not exist. * Help: Additional help information provided here ``` -3. The 'Dynamic' view is a combination of the views 'message' and 'Analytic' for users working -in the console that also run scripts. When the user is working Interactively in the CLI, -they will receive errors in the view of 'Message'. When the user executes a script, -errors will use the view 'Analytic'. - - An example is in the image below: ![Message and Analytic](.\RFC00XX-Update-Error-View.png) -4. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed +3. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed view of the fully qualified error, including nested inner exceptions. - Resolve-ErrorRecord will provide the following: @@ -110,7 +106,7 @@ Error occurs in Interactive mode. Cmdlet displays details of the last error disp ```powershell PS C:\> Get-Childitem -Path c:\notreal -ERROR: Cannot find path ‘C:\notreal’ because it does not exist +Get-ChildItem: Cannot find path ‘C:\notreal’ because it does not exist PS C:\test> Resolve-ErrorRecord @@ -123,13 +119,11 @@ from $error array to 'Resolve-ErrorRecord' to display more details. ```powershell PS C:\> .\MyScript.ps1 -ERROR: ItemNotFoundException - ---> C:\GitHub\pri-errorview\RustTest\test.ps1 +Get-ChildItem: in /Users/Username/GitHub/Errorview/script.test.ps1 | 15 | Get-ChildItem -Path c:\notreal | ^^^ Cannot find path 'C:\notreal' because it does not exist. - | - * Help: this is for additional help information + * Help: Additional help information provided here PS C:\> $error[0] | Resolve-ErrorRecord @@ -149,6 +143,11 @@ PS C:\> Resolve-ErrorRecord -Newest 3 ## Alternate Proposals and Considerations +__Alternative/additional view customization__ + +It is conceivable in the future to add extensibility for module builders, +that they could supply their own diagnostic script for specific error customization. + __Alternative single-line display__ ```powershell diff --git a/1-Draft/RFC00XX-Update-Error-View.png b/1-Draft/RFC00XX-Update-Error-View.png index 48ba682ac577e178bc6b479f1dc36d8d47795d6a..d62af555c62a4c40234950fc49000c671ea1f25a 100644 GIT binary patch literal 35199 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 AmH+?% literal 40639 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 Date: Tue, 8 Oct 2019 08:54:05 -0700 Subject: [PATCH 30/52] updated RFC Resolve-errorrecord definition --- 1-Draft/RFC00XX-Update-Error-View.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 08bf1455..29ce8731 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -80,6 +80,14 @@ Line | 3. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed view of the fully qualified error, including nested inner exceptions. +- Rendering is recursive for nested objects for Exceptions, InvocationInfo, +and Arrays otherwise it uses ToString(). +- Members that are empty or null are not shown. +- There is logic that if the console is less than or equal to 120 columns wide, +it uses 4 spaces to indent to get more text on screen, otherwise it indents based +on property name lengths. +- A new FormatAccentColor is introduced to highlight property names from their values. This can be used later to add accents to tables and list formatting. +- Removed some commented out unneeded code from ConciseView. - Resolve-ErrorRecord will provide the following: @@ -141,6 +149,15 @@ PS C:\> Resolve-ErrorRecord -Newest 3 **** Detailed message here **** ``` +__Example 4__ +Maintain the ErrorRecord object for additional pipeline operations + +```PowerShell +PS C:\> Resolve-ErrorRecord -Newest 3 | Select-String -Pattern 'MyFile.txt' + +**** Detailed message here **** +``` + ## Alternate Proposals and Considerations __Alternative/additional view customization__ From ec0b74516fecb6eb1fdb85707284007774fa5eac Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 8 Oct 2019 08:56:33 -0700 Subject: [PATCH 31/52] Corected typos --- 1-Draft/RFC00XX-Update-Error-View.md | 1 + 1 file changed, 1 insertion(+) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 29ce8731..b53b72ef 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -80,6 +80,7 @@ Line | 3. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed view of the fully qualified error, including nested inner exceptions. + - Rendering is recursive for nested objects for Exceptions, InvocationInfo, and Arrays otherwise it uses ToString(). - Members that are empty or null are not shown. From 493a3a7fd97cc6ed8a2f5650ee75cdb9f9715442 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 8 Oct 2019 09:12:35 -0700 Subject: [PATCH 32/52] Updated RFC with Prefix conditions --- 1-Draft/RFC00XX-Update-Error-View.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index b53b72ef..f4450a88 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -50,6 +50,14 @@ __Key Design Considerations__ 1. To reduce confusion and improve debugging success for new and occasional users, error messages should call WriteErrorLine to produce a simplified message for interactive CLI users. +- The error message will contain a prefix as described: + + + If the error is an Exception, it prefixes with Exception:. + + If the error has InvocationInfo.MyCommand, it prefixes the command. + + If the error has InvocationName, CategoryInfo.Category, or CategoryInfo.Reason, +the message will prefix these. + + Only if none of those exist does it actually use Error:. + - Simplified error message syntax from 'Message'. (See graphic below) ```powershell From 8d0498e40c94927cfb6550a52df6b9b5d102264b Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 15 Oct 2019 10:33:55 -0700 Subject: [PATCH 33/52] update RFC to reflect new cmdlet name --- 1-Draft/RFC00XX-Update-Error-View.md | 101 +++++++++++++-------------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index f4450a88..3c955b74 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -10,30 +10,29 @@ Comments Due: 10/31/2019 # Update $ErrorView with simplified views for Error Messages When an error occurs in PowerShell, the customers on-screen error message experience currently -provides a level of detail that obscures the exception message from being recognized and read by -new or occasional PowerShell users. The addition of a simplified error view will improve both -comprehension and troubleshooting experience. A new cmdlet 'Resolve-ErrorRecord' will provide +provides a level of detail that obscures the exception message from being recognized and read by new +or occasional PowerShell users. The addition of a simplified error view will improve both +comprehension and troubleshooting experience. A new cmdlet `Get-Error` will provide complete detailed view of the fully qualified error when desired. ## Motivation -The on-screen experience, when receiving an error message, -is controlled through the views NormalView (the default) and CategoryView. These are user selectable -through the preference variable $ErrorView. -This RFC describes Changing '$ErrorView to an enumeration and adding one additional dynamic view -to improve readability; 'ConciseView' +The on-screen experience, when receiving an error message, is controlled through the views +NormalView (the default) and CategoryView. These are user selectable through the preference variable +**$ErrorView**. This RFC describes Changing **$ErrorView** to an enumeration and adding one +additional dynamic view to improve readability; 'ConciseView' -- ConciseView - provides a concise error message suitable for new or occasional PowerShell users -and a refactored view for advanced module builders. If the error is not from a script or parser -error, then it's a single line error message. Otherwise, you get a multiline error message that -contains the error and a pointer and error message showing where the error is in that line. -If the terminal doesn't support Virtual Terminal, then vt100 color codes are not used. +- ConciseView - provides a concise error message suitable for new or occasional PowerShell users and + a refactored view for advanced module builders. If the error is not from a script or parser error, + then it's a single line error message. Otherwise, you get a multiline error message that contains + the error, a pointer and error message showing where the error is in that line. If the terminal + doesn't support Virtual Terminal, then vt100 color codes are not used. -A comprehensive detailed view of the fully qualified error, including inner exceptions, -will be provided by the `Resolve-ErrorRecord` cmdlet. +A comprehensive detailed view of the fully qualified error, including inner exceptions, will be +provided by the `Get-Error` cmdlet. -'$ErrorView' shall contain the original views for backward compatibility and to -lessen this breaking change. The view list is as follows: +**$ErrorView** shall contain the original views for backward compatibility and to lessen this +breaking change. The view list is as follows: - ConciseView - NormalView @@ -41,22 +40,21 @@ lessen this breaking change. The view list is as follows: ## Specification -The proposal is to add one new view to help improve error message comprehension -based on user needs. For in-depth troubleshooting, a new cmdlet -Resolve-ErrorRecord to provide detailed error information. +The proposal is to add one new view to help improve error message comprehension based on user needs. +For in-depth troubleshooting, a new cmdlet Get-Error to provide detailed error information. __Key Design Considerations__ -1. To reduce confusion and improve debugging success for new and occasional users, -error messages should call WriteErrorLine to produce a simplified message for interactive CLI users. +1. To reduce confusion and improve debugging success for new and occasional users, error messages + should call WriteErrorLine to produce a simplified message for interactive CLI users. - The error message will contain a prefix as described: - + If the error is an Exception, it prefixes with Exception:. - + If the error has InvocationInfo.MyCommand, it prefixes the command. - + If the error has InvocationName, CategoryInfo.Category, or CategoryInfo.Reason, -the message will prefix these. - + Only if none of those exist does it actually use Error:. + - If the error is an Exception, it prefixes with Exception:. + - If the error has InvocationInfo.MyCommand, it prefixes the command. + - If the error has InvocationName, CategoryInfo.Category, or CategoryInfo.Reason, the message + will prefix these. + - Only if none of those exist does it actually use Error:. - Simplified error message syntax from 'Message'. (See graphic below) @@ -65,13 +63,13 @@ PS C:\> Get-Childitem -Path c:\notreal Get-Childitem: Cannot find path ‘C:\notreal’ because it does not exist ``` -2. To improve script debugging for advanced module builders and scripters, -a refactored error view will be displayed. If the error is not from a script or parser -error, then it's a single line error message. Otherwise, you get a multiline error message that -contains the error and a pointer and error message showing where the error is in that line. +2. To improve script debugging for advanced module builders and scripters, a refactored error view + will be displayed. If the error is not from a script or parser error, then it's a single line + error message. Otherwise, you get a multiline error message that contains the error and a pointer + and error message showing where the error is in that line. -- A new property ErrorAccentColor is added to support changing the accent color of the error message. -If the terminal doesn't support Virtual Terminal, then vt100 color codes are not used. +- A new property **ErrorAccentColor** is added to support changing the accent color of the error + message. If the terminal doesn't support Virtual Terminal, then vt100 color codes are not used. ```powershell PS C:\> .\MyScript.ps1 @@ -86,28 +84,27 @@ Line | ![Message and Analytic](.\RFC00XX-Update-Error-View.png) -3. A new cmdlet `Resolve-ErrorRecord` will produce comprehensive detailed -view of the fully qualified error, including nested inner exceptions. +3. A new cmdlet `Get-Error` will produce comprehensive detailed view of the fully qualified error, + including nested inner exceptions. -- Rendering is recursive for nested objects for Exceptions, InvocationInfo, -and Arrays otherwise it uses ToString(). +- Rendering is recursive for nested objects for Exceptions, InvocationInfo, and Arrays otherwise it + uses ToString(). - Members that are empty or null are not shown. -- There is logic that if the console is less than or equal to 120 columns wide, -it uses 4 spaces to indent to get more text on screen, otherwise it indents based -on property name lengths. -- A new FormatAccentColor is introduced to highlight property names from their values. This can be used later to add accents to tables and list formatting. +- Indentation uses 4 spaces for nested objects +- A new FormatAccentColor is introduced to highlight property names from their values. This can be + used later to add accents to tables and list formatting. - Removed some commented out unneeded code from ConciseView. -- Resolve-ErrorRecord will provide the following: +- `Get-Error` will provide the following: - + Display Last Error ($Error[0]) – default behavior - + Accept Pipeline input – support $error[1] | - + Option for the Newest X errors in the session + - Display the newest Error ($Error[0]) – default behavior + - Accept Pipeline input – support $error[1] | + - Option for the Newest X errors in the session (This will be aliased with Last) -- Resolve-ErrorRecord syntax +- `Get-Error` syntax ```powershell -Resolve-ErrorRecord [-InputObject ] [-Newest ] [-All] [] +Get-Error [-InputObject ] [-Newest ] [-All] [] ``` First parameter set @@ -125,14 +122,14 @@ Error occurs in Interactive mode. Cmdlet displays details of the last error disp PS C:\> Get-Childitem -Path c:\notreal Get-ChildItem: Cannot find path ‘C:\notreal’ because it does not exist -PS C:\test> Resolve-ErrorRecord +PS C:\test> Get-Error **** Detailed message here **** ``` __Example 2__ Error occurs in script, shows error from view 'Analytic', and then is piped -from $error array to 'Resolve-ErrorRecord' to display more details. +from $error array to 'Get-Error' to display more details. ```powershell PS C:\> .\MyScript.ps1 @@ -142,7 +139,7 @@ Get-ChildItem: in /Users/Username/GitHub/Errorview/script.test.ps1 | ^^^ Cannot find path 'C:\notreal' because it does not exist. * Help: Additional help information provided here -PS C:\> $error[0] | Resolve-ErrorRecord +PS C:\> $error[0] | Get-Error **** Detailed message here **** ``` @@ -151,7 +148,7 @@ __Example 3__ Display detailed error information for the most recent 3 errors. ```powershell -PS C:\> Resolve-ErrorRecord -Newest 3 +PS C:\> Get-Error -Newest 3 **** Detailed message here **** **** Detailed message here **** @@ -162,7 +159,7 @@ __Example 4__ Maintain the ErrorRecord object for additional pipeline operations ```PowerShell -PS C:\> Resolve-ErrorRecord -Newest 3 | Select-String -Pattern 'MyFile.txt' +PS C:\> Get-Error -Newest 3 | Select-String -Pattern 'MyFile.txt' **** Detailed message here **** ``` From 34a3a622e3baa6a907934000ee549669c018c72a Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 21 Oct 2019 13:42:27 -0700 Subject: [PATCH 34/52] updated RFC with Concise view as default view --- 1-Draft/RFC00XX-Update-Error-View.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 3c955b74..f40c2421 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -40,8 +40,9 @@ breaking change. The view list is as follows: ## Specification -The proposal is to add one new view to help improve error message comprehension based on user needs. -For in-depth troubleshooting, a new cmdlet Get-Error to provide detailed error information. +The proposal is to add one new view, 'ConciseView', to help improve error message comprehension. +ConciseView will be the default view. For in-depth error object information, a new cmdlet +'Get-Error' provides detailed error information. __Key Design Considerations__ From 3493c6bb8fa86e3725174cbd10311226cc6f83ae Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Wed, 23 Oct 2019 15:24:25 -0700 Subject: [PATCH 35/52] Update RFC00XX-Update-Error-View.md --- 1-Draft/RFC00XX-Update-Error-View.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index f40c2421..7810e143 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -83,7 +83,7 @@ Line | - An example is in the image below: -![Message and Analytic](.\RFC00XX-Update-Error-View.png) +![Message and Analytic](RFC00XX-Update-Error-View.png) 3. A new cmdlet `Get-Error` will produce comprehensive detailed view of the fully qualified error, including nested inner exceptions. From 04559eda0e159d046ea1430af0a91c930241c81e Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 24 Oct 2019 08:59:33 -0700 Subject: [PATCH 36/52] updated image to reflect cuurent code --- 1-Draft/RFC00XX-Update-Error-View.png | Bin 35199 -> 54602 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.png b/1-Draft/RFC00XX-Update-Error-View.png index d62af555c62a4c40234950fc49000c671ea1f25a..842050a9ac6016f72889e0d295fe986fd7e58060 100644 GIT binary patch literal 54602 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 literal 35199 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 AmH+?% From eaecab04d6cb61455a14949c206ac9c67f3335b5 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 16 Jan 2020 08:26:23 -0800 Subject: [PATCH 37/52] update to reflect implementation --- 1-Draft/RFC00XX-Update-Error-View.md | 9 ++------- 1-Draft/RFC00XX-Update-Error-View.png | Bin 54602 -> 0 bytes 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 1-Draft/RFC00XX-Update-Error-View.png diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 7810e143..46666e6b 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -74,17 +74,12 @@ Get-Childitem: Cannot find path ‘C:\notreal’ because it does not exist ```powershell PS C:\> .\MyScript.ps1 -Get-ChildItem: in /Users/Username/GitHub/Errorview/script.test.ps1 +Get-ChildItem: C:\GitHub\MyScript.ps1 Line | 15 | Get-ChildItem -Path c:\notreal - | ^^^ Cannot find path 'C:\notreal' because it does not exist. - * Help: Additional help information provided here + | ^ Cannot find path 'C:\notreal' because it does not exist. ``` -- An example is in the image below: - -![Message and Analytic](RFC00XX-Update-Error-View.png) - 3. A new cmdlet `Get-Error` will produce comprehensive detailed view of the fully qualified error, including nested inner exceptions. diff --git a/1-Draft/RFC00XX-Update-Error-View.png b/1-Draft/RFC00XX-Update-Error-View.png deleted file mode 100644 index 842050a9ac6016f72889e0d295fe986fd7e58060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54602 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 From a97cbfec7062a44590277279c28c2331fbaf329e Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 16 Jan 2020 13:55:19 -0800 Subject: [PATCH 38/52] update to match implementation - remove carets --- 1-Draft/RFC00XX-Update-Error-View.md | 36 ++++++++++++++++++---------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 46666e6b..e4d99aef 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -51,13 +51,13 @@ __Key Design Considerations__ - The error message will contain a prefix as described: - - If the error is an Exception, it prefixes with Exception:. - - If the error has InvocationInfo.MyCommand, it prefixes the command. - - If the error has InvocationName, CategoryInfo.Category, or CategoryInfo.Reason, the message + - If the error is an Exception, it prefixes with Exception:. + - If the error has InvocationInfo.MyCommand, it prefixes the command. + - If the error has InvocationName, CategoryInfo.Category, or CategoryInfo.Reason, the message will prefix these. - - Only if none of those exist does it actually use Error:. + - Only if none of those exist does it actually use Error:. -- Simplified error message syntax from 'Message'. (See graphic below) +- Simplified error message syntax from 'Message'. (See below) ```powershell PS C:\> Get-Childitem -Path c:\notreal @@ -76,8 +76,20 @@ Get-Childitem: Cannot find path ‘C:\notreal’ because it does not exist PS C:\> .\MyScript.ps1 Get-ChildItem: C:\GitHub\MyScript.ps1 Line | -15 | Get-ChildItem -Path c:\notreal - | ^ Cannot find path 'C:\notreal' because it does not exist. + 15 | Get-ChildItem -Path c:\NotReal + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + | Cannot find path 'C:\NotReal' because it does not exist. +``` + +- The error message is truncated and displayed using the **MessagePosition** property of for line wrapping + +```powershell +PS C:\> .\MyScript.ps1 +Selct-object: C:\GitHub\MyScript.ps1 +Line | + 25 | Get-Process | Selct-object -property NotReal + | ~~~~~~~~~~~~ + | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, or | operable program. Check the spelling of the name, or if a path was included, verify that the | path is correct and try again. ``` 3. A new cmdlet `Get-Error` will produce comprehensive detailed view of the fully qualified error, @@ -129,11 +141,11 @@ from $error array to 'Get-Error' to display more details. ```powershell PS C:\> .\MyScript.ps1 -Get-ChildItem: in /Users/Username/GitHub/Errorview/script.test.ps1 - | -15 | Get-ChildItem -Path c:\notreal - | ^^^ Cannot find path 'C:\notreal' because it does not exist. - * Help: Additional help information provided here +Selct-object: C:\GitHub\MyScript.ps1 +Line | + 25 | Get-Process | Selct-object -property NotReal + | ~~~~~~~~~~~~ + | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, or | operable program. Check the spelling of the name, or if a path was included, verify that the | path is correct and try again. PS C:\> $error[0] | Get-Error From 0cfab18869aafb8139107bcb124d649b929f9b5f Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 16 Jan 2020 13:58:44 -0800 Subject: [PATCH 39/52] update to correct readability flow --- 1-Draft/RFC00XX-Update-Error-View.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index e4d99aef..4ba881dc 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -89,7 +89,9 @@ Selct-object: C:\GitHub\MyScript.ps1 Line | 25 | Get-Process | Selct-object -property NotReal | ~~~~~~~~~~~~ - | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, or | operable program. Check the spelling of the name, or if a path was included, verify that the | path is correct and try again. + | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, + | or operable program. Check the spelling of the name, or if a path was included, + | verify that the | path is correct and try again. ``` 3. A new cmdlet `Get-Error` will produce comprehensive detailed view of the fully qualified error, @@ -145,7 +147,9 @@ Selct-object: C:\GitHub\MyScript.ps1 Line | 25 | Get-Process | Selct-object -property NotReal | ~~~~~~~~~~~~ - | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, or | operable program. Check the spelling of the name, or if a path was included, verify that the | path is correct and try again. + | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, + | or operable program. Check the spelling of the name, or if a path was included, + | verify that the | path is correct and try again. PS C:\> $error[0] | Get-Error From 07807c7f3d76d5ede130dcfb1ac39923cdb3da70 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 16 Jan 2020 14:36:38 -0800 Subject: [PATCH 40/52] update messageposition property information --- 1-Draft/RFC00XX-Update-Error-View.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/1-Draft/RFC00XX-Update-Error-View.md index 4ba881dc..0c5bbeac 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/1-Draft/RFC00XX-Update-Error-View.md @@ -81,7 +81,7 @@ Line | | Cannot find path 'C:\NotReal' because it does not exist. ``` -- The error message is truncated and displayed using the **MessagePosition** property of for line wrapping +- The error message is truncated and displayed by reusing the **MessagePosition** property of InvocationInfo ```powershell PS C:\> .\MyScript.ps1 From e6cf93855f1336709eb57661260f3f1d139e8848 Mon Sep 17 00:00:00 2001 From: Joey Aiello Date: Wed, 29 Jan 2020 15:15:52 -0800 Subject: [PATCH 41/52] Prep RFC0048 - Updated Error View for merging --- .../RFC0048-Update-Error-View.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename 1-Draft/RFC00XX-Update-Error-View.md => 5-Final/RFC0048-Update-Error-View.md (99%) diff --git a/1-Draft/RFC00XX-Update-Error-View.md b/5-Final/RFC0048-Update-Error-View.md similarity index 99% rename from 1-Draft/RFC00XX-Update-Error-View.md rename to 5-Final/RFC0048-Update-Error-View.md index 0c5bbeac..f87fe500 100644 --- a/1-Draft/RFC00XX-Update-Error-View.md +++ b/5-Final/RFC0048-Update-Error-View.md @@ -1,8 +1,8 @@ --- RFC: Update $ErrorView with simplified views for Error Messages Author: Jason Helmick -Status: Draft -Version: 0.0.0 +Status: Final +Version: 1.0.0 Area: PowerShell Comments Due: 10/31/2019 --- From 20d1ed965815a0eb1738a13e67e2299a679b77d9 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 28 Sep 2020 08:10:04 -0700 Subject: [PATCH 42/52] wip:NativeCommandErrorHandling --- .../RFC00XX-Native-Command-Error-Handling.md | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 1-Draft/RFC00XX-Native-Command-Error-Handling.md diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md new file mode 100644 index 00000000..d76f2a98 --- /dev/null +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -0,0 +1,229 @@ +--- +RFC: RFC00XX +Author: Jason Helmick +Status: Draft +Area: Core +Comments Due: 10/31/2020 +--- + +# Native Command Error Handling + +PowerShell scripts using native commands would benefit from being able to use error handling +features like those used by cmdlets. + +## Motivation + +In PowerShell by default, script processing continues when non-terminating errors occur. This is a +benefit when expecting non-terminating errors in normal execution such as non-responsive computers from +a list. This default behavior is controlled with the preference variable +`$ErrorActionPreference` default of `Continue`. + +During development and debugging, often customers prefer that script execution stops when a +non-terminating error occurs. PowerShell currently supports customers with this ability by setting +the preference variable in the script. + +```Powershell +$ErrorActionPreference = 'Stop' +``` + +Native commands return an exit code to the calling application which will be zero for success or +non-zero for failure. However, native commands currently do not participate in the PowerShell error +stream. Customers working with native commands in their scripts will need to check the execution +status after each call using a helper function similar to below: + +```Powershell +if( ! $? ) +{ + exit $lastexitcode; +} + ``` + +Simply relaying the errors through the error stream isn't the solution. The example itself doesn't +support all cases as `$?` can be false from a cmdlet or function error, making `$LASTEXITCODE` +stale. + +To support a similar style of error handling with native commands, this specification proposes +converting native command errors into PowerShell errors similar to the `sh`-compatible +`set -e` mode. + + The specification and alternative proposals are based on the + [Equivalent of bash `set -e` #3415](https://github.com/PowerShell/PowerShell/issues/3415) + committee review of the associated + [pull request](https://github.com/PowerShell/PowerShell/pull/3523), and + [implementation plan](https://github.com/PowerShell/PowerShell-RFC/pull/88#issuecomment-613653678) + +## Specification + +This RFC proposes including native commands in the error handling framework when the feature is +enabled by adding an error to the error stream if the exit code of a native command is non-zero. + +The `$PSNativeCommandErrorAction` preference variable will implement a version of the +`$ErrorActionPreference` variable for native commands. + +- The value will default to `Ignore` for compatibility with existing behavior. +- For non-zero exit codes and except for the value 'Ignore', an `ErrorRecord` will be added to + `$Error` that wraps the exit code and the command executed that returned the exit code. +- Initially, only the existing values of `$ErrorActionPreference` will be supported. +- The set of values may be extended later to include `MatchErrorActionPreference`, which should + apply the `$ErrorActionPreference` setting to native commands. +- A conversion will occur between `$PSNativeCommandErrorAction` and `$ErrorActionPreference` + values, where `MatchErrorActionPreference` is converted to the current value of + `$ErrorActionPreference` + +Valid values for `$ErrorActionPreference` + +| Value | Definition +---------------- | ------------------- +| Break | Enter the debugger when an error occurs or when an exception is raised. +| Continue | (Default) - Displays the error message and continues executing. +| Ignore | Suppresses the error message and continues to execute the command. The Ignore value is intended for per-command use, not for use as saved preference. Ignore isn't a valid value for the $ErrorActionPreference variable. +| Inquire | Displays the error message and asks you whether you want to continue. +| SilentlyContinue| No effect. The error message isn't displayed and execution continues without interruption. +| Stop | Displays the error message and stops executing. In addition to the error generated, the Stop value generates an ActionPreferenceStopException object to the error stream. stream +| Suspend | Automatically suspends a workflow job to allow for further investigation. + +The reported error record should be created with the following details: + +| Property | Definition +---------------- | ------------------- +| exception: | `ExitCode`, with the exit code of the failed command. +| error id: | `"Program {0} failed with unhandled exit code {1}"`, with the command name and the exit code, from resource string `ProgramFailedToComplete`. +| error category: | `ErrorCategory.NotSpecified`. +| object: | exit code + + This does not provide the actual semantics of bash `set -eo pipefail` as Bourne shell-style + integration with existing status handling syntax is not implemented. + +`Set -eo pipefail` is a combination of `Set -u` and `Set -o pipefail`: + +- `Set -u`, a reference to any variable not previously defined results in an error. Similar to + Set-StrictMode in PowerShell. +- `Set -o pipefail`, by default, pipeline success is determined by the last command executed. `Set + -o pipefail` returns an error if any command in the pipeline fails. + + As a result of not including the semantics of `Set -eo pipefail`, PowerShell script logic for + handling native command exit codes would need to use either `try`..`catch` or existing exit status + handling language constructs, according to the setting of this preference variable. + + One way of overriding `$ErrorActionPreference` for a single native command and handling + it's exit status explicitly would be to put this logic into a script block and call it + with the invocation operator (`&`). + +## Alternative Approaches and Considerations + +We could extend this existing behavior to give equivalent functionality to bash `Set -eo pipefail`. +This includes: + +- `Set -u`, a reference to any variable not previously defined results in an error. Similar to + `Set-StrictMode` in PowerShell. +- `Set -o pipefail`, by default, pipeline success is determined by the last command executed. `Set + -o pipefail` returns an error if any command in the pipeline fails. + +Today there exists a workaround for handling native command exit codes using a `try`..`catch` block. +This alternative may be considered in the future. + +### Add "strict" native command option + +The `$PSStrictNativeCommand` preference should treat creation of an `ErrorRecord` for native +commands in the same way as this is treated elsewhere. Described here as a Boolean, could be +considered as an enum to allow for future expansion. Possible values are: + +- `$false`: (the default) ignore non-zero exit codes. This is the same as existing PowerShell + treatment of this case. +- `$true`: Populate the error stream of the native command with an `ErrorRecord` associated with an + `ExitException` exception. + +### Modifying existing semantics to consider exit code and exit status + +The error will throw an exception, potentially terminating the session, in the same situation as +other non-terminating errors will do this, i.e. where `$ErrorActionPreference` is set to `"stop"`. +This would not be the desired behavior on commands where the script already handles a non-zero exit +code, which would require the addition of extra boilerplate to use multiple native commands in +combination. There are a number of ways that this could be made more flexible by integrating exit +code and exit status handling into the language syntax. + +#### Convert non-terminating errors to terminating where the command output is used + +This approach implements semantics equivalent to bash `set -eo pipefail` in the runtime layer. + +The `$PSStrictPipeLine` preference variable would govern promotion of a non-terminating error to a +terminating error on getting an object from the pipeline output stream. Possible values would be: + +- `$false`: (the default) an object can be collected from the pipeline output stream regardless of + the command exit value. This is the same as existing PowerShell treatment of this case. +- `$true`: where the exit status of a native command is `$false`, trying to get an object from its + output stream will create a terminating error from the non-terminating errors in its error stream. + Conversion to boolean would be structured to ensure that this returns `$false` if the output + pipeline does not contain anything without trying to get an actual value from it. + +This would allow syntax like `if`, `while` and pipeline chain operators to be usefully combined with +native commands. + +#### Sanitize semantics of treating a native command as a conditional value + +This option in combination with the above enables functionality analogous to bash `set -eo pipefail` + +PowerShell converts the output stream to a boolean value where a native command is used as a +"condition", i.e. the `-not` operator, or an `if`, `elseif` or `while` statement. This is not +particularly useful with native commands, which would tend to produce no output on success, at least +when executed in batch as opposed to interactive mode. + +The `$PSUseNativeExitStatus` variable would govern whether exit status is used in determining the +boolean value of a native command for a conditional context. Possible values would be: + +- `$false`: (the default) the boolean value of native command is defined as whether or not the + length of the output stream is non-zero. This is the same as existing PowerShell treatment of this + case. +- `$true`: the boolean value of a native command is it's exit status (`$?`), and + +This would allow syntax like `if` and `while` to be usefully combined with native commands. + +#### Add strict pipeline chain failure semantics. + +Treat only ignored exit statuses as exceptions. + +The `$PSStrictPipeLineChain` preference variable would govern the exit status in the last command of +a pipeline. Possible values would be: + +- `$false`: (the default) would ignore `$false` exit status on the last command. This is the same as + existing PowerShell treatment of this case. +- `$true`: for a pipeline that is being used in a conditional context (see above), and where the + exist status of the last command in the pipeline is `$false`, would create a terminating error + from the non-terminating errors in the command error stream. + +This should improve on the basic specification by allowing the idiom to be usefully combined with +pipeline chaining. + +### Use dynamic scope/Set-StrictMode + +This approach implements dynamic scoping for native command error management using a cmdlet. + +Some of the above would be enabled with `Set-StrictMode -version 6` instead of with boolean +preference variables. + +The dynamic scoping approach would improve on earlier listed approaches by limiting the scope of +error handling configuration so that script functions could not have an effect on the error handling +mode in the calling scope. + +If `Set-StrictMode` is used for this, it would need to enable some combination of enhancements that +will not raise errors on scripts that have already implemented strong native command error handling. + +### Use lexical scope/Exception handling extensions + +Dynamic scoping approach would have side-effects on called scripts. This is analogous to the +behavior of Bourne type shells, which maintain this behavior for +[historic compatibility](http://austingroupbugs.net/view.php?id=52) reasons. + +Lexical scoping of native command error handling would improve on earlier options by integrating +native command error handling fully into the existing exception handling without any +side-effects in calling or called scripts. + +With this approach, native command error handling mode would be used through language syntax instead +of preference variables or cmdlets. A possible syntax might be to add a strictness option to the try +statement which applies to the lexical scope of the try statement. + +Lexical scope requires more runtime overhead; a mapping must be maintained at runtime between each +runtime scope and its corresponding lexical scope that existed at parse-time. In addition, lexical +scope may not apply well to errors. Errors produce stack traces at runtime and should be handled in +a runtime-facing way. For these reasons, this alternative is not under consideration. + From 52579cb5e9aac8146510d73d01db22521cc26b79 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 5 Oct 2020 08:12:38 -0700 Subject: [PATCH 43/52] Delete RFC0048-Update-Error-View.md --- 5-Final/RFC0048-Update-Error-View.md | 238 --------------------------- 1 file changed, 238 deletions(-) delete mode 100644 5-Final/RFC0048-Update-Error-View.md diff --git a/5-Final/RFC0048-Update-Error-View.md b/5-Final/RFC0048-Update-Error-View.md deleted file mode 100644 index f87fe500..00000000 --- a/5-Final/RFC0048-Update-Error-View.md +++ /dev/null @@ -1,238 +0,0 @@ ---- -RFC: Update $ErrorView with simplified views for Error Messages -Author: Jason Helmick -Status: Final -Version: 1.0.0 -Area: PowerShell -Comments Due: 10/31/2019 ---- - -# Update $ErrorView with simplified views for Error Messages - -When an error occurs in PowerShell, the customers on-screen error message experience currently -provides a level of detail that obscures the exception message from being recognized and read by new -or occasional PowerShell users. The addition of a simplified error view will improve both -comprehension and troubleshooting experience. A new cmdlet `Get-Error` will provide -complete detailed view of the fully qualified error when desired. - -## Motivation - -The on-screen experience, when receiving an error message, is controlled through the views -NormalView (the default) and CategoryView. These are user selectable through the preference variable -**$ErrorView**. This RFC describes Changing **$ErrorView** to an enumeration and adding one -additional dynamic view to improve readability; 'ConciseView' - -- ConciseView - provides a concise error message suitable for new or occasional PowerShell users and - a refactored view for advanced module builders. If the error is not from a script or parser error, - then it's a single line error message. Otherwise, you get a multiline error message that contains - the error, a pointer and error message showing where the error is in that line. If the terminal - doesn't support Virtual Terminal, then vt100 color codes are not used. - -A comprehensive detailed view of the fully qualified error, including inner exceptions, will be -provided by the `Get-Error` cmdlet. - -**$ErrorView** shall contain the original views for backward compatibility and to lessen this -breaking change. The view list is as follows: - -- ConciseView -- NormalView -- CategoryView - -## Specification - -The proposal is to add one new view, 'ConciseView', to help improve error message comprehension. -ConciseView will be the default view. For in-depth error object information, a new cmdlet -'Get-Error' provides detailed error information. - -__Key Design Considerations__ - -1. To reduce confusion and improve debugging success for new and occasional users, error messages - should call WriteErrorLine to produce a simplified message for interactive CLI users. - -- The error message will contain a prefix as described: - - - If the error is an Exception, it prefixes with Exception:. - - If the error has InvocationInfo.MyCommand, it prefixes the command. - - If the error has InvocationName, CategoryInfo.Category, or CategoryInfo.Reason, the message - will prefix these. - - Only if none of those exist does it actually use Error:. - -- Simplified error message syntax from 'Message'. (See below) - -```powershell -PS C:\> Get-Childitem -Path c:\notreal -Get-Childitem: Cannot find path ‘C:\notreal’ because it does not exist -``` - -2. To improve script debugging for advanced module builders and scripters, a refactored error view - will be displayed. If the error is not from a script or parser error, then it's a single line - error message. Otherwise, you get a multiline error message that contains the error and a pointer - and error message showing where the error is in that line. - -- A new property **ErrorAccentColor** is added to support changing the accent color of the error - message. If the terminal doesn't support Virtual Terminal, then vt100 color codes are not used. - -```powershell -PS C:\> .\MyScript.ps1 -Get-ChildItem: C:\GitHub\MyScript.ps1 -Line | - 15 | Get-ChildItem -Path c:\NotReal - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - | Cannot find path 'C:\NotReal' because it does not exist. -``` - -- The error message is truncated and displayed by reusing the **MessagePosition** property of InvocationInfo - -```powershell -PS C:\> .\MyScript.ps1 -Selct-object: C:\GitHub\MyScript.ps1 -Line | - 25 | Get-Process | Selct-object -property NotReal - | ~~~~~~~~~~~~ - | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, - | or operable program. Check the spelling of the name, or if a path was included, - | verify that the | path is correct and try again. -``` - -3. A new cmdlet `Get-Error` will produce comprehensive detailed view of the fully qualified error, - including nested inner exceptions. - -- Rendering is recursive for nested objects for Exceptions, InvocationInfo, and Arrays otherwise it - uses ToString(). -- Members that are empty or null are not shown. -- Indentation uses 4 spaces for nested objects -- A new FormatAccentColor is introduced to highlight property names from their values. This can be - used later to add accents to tables and list formatting. -- Removed some commented out unneeded code from ConciseView. - -- `Get-Error` will provide the following: - - - Display the newest Error ($Error[0]) – default behavior - - Accept Pipeline input – support $error[1] | - - Option for the Newest X errors in the session (This will be aliased with Last) - -- `Get-Error` syntax - -```powershell -Get-Error [-InputObject ] [-Newest ] [-All] [] -``` - -First parameter set - -- Newest - - + Datatype: int32 - + specifies one or more of the newest errors to display - + Not required - -__Example 1__ -Error occurs in Interactive mode. Cmdlet displays details of the last error displayed - -```powershell -PS C:\> Get-Childitem -Path c:\notreal -Get-ChildItem: Cannot find path ‘C:\notreal’ because it does not exist - -PS C:\test> Get-Error - -**** Detailed message here **** -``` - -__Example 2__ -Error occurs in script, shows error from view 'Analytic', and then is piped -from $error array to 'Get-Error' to display more details. - -```powershell -PS C:\> .\MyScript.ps1 -Selct-object: C:\GitHub\MyScript.ps1 -Line | - 25 | Get-Process | Selct-object -property NotReal - | ~~~~~~~~~~~~ - | The term 'Selct-object' is not recognized as the name of a cmdlet, function, script file, - | or operable program. Check the spelling of the name, or if a path was included, - | verify that the | path is correct and try again. - -PS C:\> $error[0] | Get-Error - -**** Detailed message here **** -``` - -__Example 3__ -Display detailed error information for the most recent 3 errors. - -```powershell -PS C:\> Get-Error -Newest 3 - -**** Detailed message here **** -**** Detailed message here **** -**** Detailed message here **** -``` - -__Example 4__ -Maintain the ErrorRecord object for additional pipeline operations - -```PowerShell -PS C:\> Get-Error -Newest 3 | Select-String -Pattern 'MyFile.txt' - -**** Detailed message here **** -``` - -## Alternate Proposals and Considerations - -__Alternative/additional view customization__ - -It is conceivable in the future to add extensibility for module builders, -that they could supply their own diagnostic script for specific error customization. - -__Alternative single-line display__ - -```powershell -: -get-item: Cannot find path ‘C:\blah’ because it does not exist: - -:: -get-item: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 - -::: -get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 - -ERROR: -ERROR: Cannot find path ‘C:\blah’ because it does not exist - -ERROR:: -ERROR: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 - -ERROR:::: -ERROR: get-item: gi: Cannot find path ‘C:\blah’ because it does not exist: At line:1 char:1 -``` - -__Alternative color for all errors__ - -1. We could change the default error message color from the current RED foreground and BLACK background to ?. -2. Differentiating errors based on termination condition: terminating versus non-terminating -is currently not intuitive. We are examining differentiating these conditions on the console. -Example, adding a new property $host.PrivateData.NonTerminatingErrorForegroundColor ='Red'. -For occasional customers, all error messages remain as color Red. For advanced customers, -they can change non-terminating errors to another color to separate the error -termination type in the console. - -__Alternative For Error, Warning, Verbose__ - -1. We could be more terse in our messages and increase consistency with verbose -and warning messages by using a single letter to identify the message. - -Legend: V = Verbose, W = Warning, E = Error(non-terminating future), F = Fatal - -```powershell -V: You are running your code - what could possibly go wrong. - -W: You are about to try something that probably will not work. - -E: Your something broke, but Im still running. At line:1 char:1 - -E: Your something broke, but Im still running. At line:1 char:1 - -E: Your something broke, but Im still running. At line:1 char:1 - -F: Now you really broke me. At line:1 char:1 - -``` From bb0a68dd4b5aa67725e5d6fc687d2c785c0662bd Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Fri, 9 Oct 2020 09:04:56 -0700 Subject: [PATCH 44/52] Apply suggestions from code review Co-authored-by: Robert Holt Co-authored-by: Joey Aiello Co-authored-by: Dongbo Wang --- 1-Draft/RFC00XX-Native-Command-Error-Handling.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index d76f2a98..ff23ebe9 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -28,7 +28,7 @@ $ErrorActionPreference = 'Stop' Native commands return an exit code to the calling application which will be zero for success or non-zero for failure. However, native commands currently do not participate in the PowerShell error -stream. Customers working with native commands in their scripts will need to check the execution +stream. Users working with native commands in their scripts will need to check the execution status after each call using a helper function similar to below: ```Powershell @@ -61,7 +61,7 @@ The `$PSNativeCommandErrorAction` preference variable will implement a version o `$ErrorActionPreference` variable for native commands. - The value will default to `Ignore` for compatibility with existing behavior. -- For non-zero exit codes and except for the value 'Ignore', an `ErrorRecord` will be added to +- For non-zero exit codes and except for the value `Ignore`, an `ErrorRecord` will be added to `$Error` that wraps the exit code and the command executed that returned the exit code. - Initially, only the existing values of `$ErrorActionPreference` will be supported. - The set of values may be extended later to include `MatchErrorActionPreference`, which should @@ -106,7 +106,7 @@ The reported error record should be created with the following details: handling language constructs, according to the setting of this preference variable. One way of overriding `$ErrorActionPreference` for a single native command and handling - it's exit status explicitly would be to put this logic into a script block and call it + its exit status explicitly would be to put this logic into a script block and call it with the invocation operator (`&`). ## Alternative Approaches and Considerations @@ -135,7 +135,7 @@ considered as an enum to allow for future expansion. Possible values are: ### Modifying existing semantics to consider exit code and exit status -The error will throw an exception, potentially terminating the session, in the same situation as +The error will throw an exception, potentially terminating the execution, in the same situation as other non-terminating errors will do this, i.e. where `$ErrorActionPreference` is set to `"stop"`. This would not be the desired behavior on commands where the script already handles a non-zero exit code, which would require the addition of extra boilerplate to use multiple native commands in @@ -226,4 +226,3 @@ Lexical scope requires more runtime overhead; a mapping must be maintained at ru runtime scope and its corresponding lexical scope that existed at parse-time. In addition, lexical scope may not apply well to errors. Errors produce stack traces at runtime and should be handled in a runtime-facing way. For these reasons, this alternative is not under consideration. - From a53678cfd6509fb721980ed5c194efdc3bc61844 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 26 Oct 2020 08:53:17 -0700 Subject: [PATCH 45/52] Apply suggestions from code review Co-authored-by: James Truher [MSFT] Co-authored-by: Robert Holt --- 1-Draft/RFC00XX-Native-Command-Error-Handling.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index ff23ebe9..f78784a3 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -26,15 +26,15 @@ the preference variable in the script. $ErrorActionPreference = 'Stop' ``` -Native commands return an exit code to the calling application which will be zero for success or +Native commands usually return an exit code to the calling application which will be zero for success or non-zero for failure. However, native commands currently do not participate in the PowerShell error stream. Users working with native commands in their scripts will need to check the execution status after each call using a helper function similar to below: ```Powershell -if( ! $? ) +if ($LASTEXITCODE -ne 0) { - exit $lastexitcode; + throw "Command failed. See above errors for details" } ``` From 012e3666cdd1d7f781de5792b156d84647428a0b Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 26 Oct 2020 10:27:46 -0700 Subject: [PATCH 46/52] updated with PScommitee comments --- .../RFC00XX-Native-Command-Error-Handling.md | 89 +++++++++---------- 1 file changed, 40 insertions(+), 49 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index f78784a3..4f7634da 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -18,18 +18,20 @@ benefit when expecting non-terminating errors in normal execution such as non-re a list. This default behavior is controlled with the preference variable `$ErrorActionPreference` default of `Continue`. -During development and debugging, often customers prefer that script execution stops when a -non-terminating error occurs. PowerShell currently supports customers with this ability by setting -the preference variable in the script. +In production, often customers prefer that script execution stops when a non-terminating error +occurs. This is particularly true in CI where the preference is to fail fast. PowerShell currently +supports customers with this ability by setting the preference variable in the script. ```Powershell $ErrorActionPreference = 'Stop' ``` -Native commands usually return an exit code to the calling application which will be zero for success or -non-zero for failure. However, native commands currently do not participate in the PowerShell error -stream. Users working with native commands in their scripts will need to check the execution -status after each call using a helper function similar to below: +Native commands usually return an exit code to the calling application which will be zero for +success or non-zero for failure. However, native commands currently do not participate in the +PowerShell error stream. Redirected `stderr` output is not interpreted the same as the PowerShell +error stream and many native commands use `stderr` as information/verbose stream and thus only the +exit code matters. Users working with native commands in their scripts will need to check the +execution status after each call using a helper function similar to below: ```Powershell if ($LASTEXITCODE -ne 0) @@ -42,9 +44,19 @@ Simply relaying the errors through the error stream isn't the solution. The exam support all cases as `$?` can be false from a cmdlet or function error, making `$LASTEXITCODE` stale. -To support a similar style of error handling with native commands, this specification proposes -converting native command errors into PowerShell errors similar to the `sh`-compatible -`set -e` mode. +In POSIX shells, this need to terminate on command error is addressed by the `set -e` configuration, +which causes the shell to exit when a command fails. + +This specification proposes a similar idea, but adapted to the PowerShell conventions of preference +variables and catchable, self-describing, terminating error objects. This proposal further adds the +functionality of `set -e` with `set -o pipefail` to return an error if any command in a pipeline +fails. + +- `set -e` - terminates on command error +- `set -u`, a reference to any variable not previously defined results in an error. Similar to + Set-StrictMode in PowerShell and not needed to be addressed in this RFC. +- `set -o pipefail`, by default, pipeline success is determined by the last command executed. `Set + -o pipefail` returns an error if any command in the pipeline fails. The specification and alternative proposals are based on the [Equivalent of bash `set -e` #3415](https://github.com/PowerShell/PowerShell/issues/3415) @@ -54,8 +66,10 @@ converting native command errors into PowerShell errors similar to the `sh`-comp ## Specification -This RFC proposes including native commands in the error handling framework when the feature is -enabled by adding an error to the error stream if the exit code of a native command is non-zero. +This RFC proposes a preference variable to configure the elevation of errors produced by native +commands to first-class PowerShell errors, so that native command failures will produce error +objects that are added to the error stream and may terminate execution of the script without added +boilerplate. The `$PSNativeCommandErrorAction` preference variable will implement a version of the `$ErrorActionPreference` variable for native commands. @@ -70,63 +84,40 @@ The `$PSNativeCommandErrorAction` preference variable will implement a version o values, where `MatchErrorActionPreference` is converted to the current value of `$ErrorActionPreference` -Valid values for `$ErrorActionPreference` +Valid values for `$PSNativeCommandErrorAction` | Value | Definition ---------------- | ------------------- | Break | Enter the debugger when an error occurs or when an exception is raised. | Continue | (Default) - Displays the error message and continues executing. -| Ignore | Suppresses the error message and continues to execute the command. The Ignore value is intended for per-command use, not for use as saved preference. Ignore isn't a valid value for the $ErrorActionPreference variable. +| Ignore | Suppresses the error message and continues to execute the command. | Inquire | Displays the error message and asks you whether you want to continue. | SilentlyContinue| No effect. The error message isn't displayed and execution continues without interruption. | Stop | Displays the error message and stops executing. In addition to the error generated, the Stop value generates an ActionPreferenceStopException object to the error stream. stream | Suspend | Automatically suspends a workflow job to allow for further investigation. -The reported error record should be created with the following details: +The reported error record object should be type: `NativeCommandException` with the following details: | Property | Definition ---------------- | ------------------- -| exception: | `ExitCode`, with the exit code of the failed command. -| error id: | `"Program {0} failed with unhandled exit code {1}"`, with the command name and the exit code, from resource string `ProgramFailedToComplete`. -| error category: | `ErrorCategory.NotSpecified`. +| ExitCode: | The exit code of the failed command. +| ErrorID: | `"Program {0} ended with non-zero exit code {1}"`, with the command name and the exit code, from resource string `ProgramFailedToComplete`. +| ErrorCategory: | `ErrorCategory.NotSpecified`. | object: | exit code - - This does not provide the actual semantics of bash `set -eo pipefail` as Bourne shell-style - integration with existing status handling syntax is not implemented. - -`Set -eo pipefail` is a combination of `Set -u` and `Set -o pipefail`: - -- `Set -u`, a reference to any variable not previously defined results in an error. Similar to - Set-StrictMode in PowerShell. -- `Set -o pipefail`, by default, pipeline success is determined by the last command executed. `Set - -o pipefail` returns an error if any command in the pipeline fails. - - As a result of not including the semantics of `Set -eo pipefail`, PowerShell script logic for - handling native command exit codes would need to use either `try`..`catch` or existing exit status - handling language constructs, according to the setting of this preference variable. - - One way of overriding `$ErrorActionPreference` for a single native command and handling - its exit status explicitly would be to put this logic into a script block and call it - with the invocation operator (`&`). +| Source: | The full path to the application +| ProcessInfo | details of failed command including path, exit code, and PID ## Alternative Approaches and Considerations -We could extend this existing behavior to give equivalent functionality to bash `Set -eo pipefail`. -This includes: - -- `Set -u`, a reference to any variable not previously defined results in an error. Similar to - `Set-StrictMode` in PowerShell. -- `Set -o pipefail`, by default, pipeline success is determined by the last command executed. `Set - -o pipefail` returns an error if any command in the pipeline fails. - -Today there exists a workaround for handling native command exit codes using a `try`..`catch` block. -This alternative may be considered in the future. +One way of overriding `$PSStrictNativeCommand` for a single native command and handling its exit +status explicitly would be to put this logic into a script block and call it with the invocation +operator (`&`). ### Add "strict" native command option -The `$PSStrictNativeCommand` preference should treat creation of an `ErrorRecord` for native -commands in the same way as this is treated elsewhere. Described here as a Boolean, could be -considered as an enum to allow for future expansion. Possible values are: +An additional value to the `$PSStrictNativeCommand` preference enum could treat creation of an +`ErrorRecord` for native commands in the same way as this is treated elsewhere. Described here as a +Boolean, could be considered as an enum to allow for future expansion. Possible values are: - `$false`: (the default) ignore non-zero exit codes. This is the same as existing PowerShell treatment of this case. From 821e8981572ebd3a9854cc1598a7a03c14bbdb71 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Tue, 27 Oct 2020 08:16:01 -0700 Subject: [PATCH 47/52] updated with PSCommitee comments --- 1-Draft/RFC00XX-Native-Command-Error-Handling.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index 4f7634da..01d11ed7 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -48,9 +48,9 @@ In POSIX shells, this need to terminate on command error is addressed by the `se which causes the shell to exit when a command fails. This specification proposes a similar idea, but adapted to the PowerShell conventions of preference -variables and catchable, self-describing, terminating error objects. This proposal further adds the -functionality of `set -e` with `set -o pipefail` to return an error if any command in a pipeline -fails. +variables and catchable, self-describing, terminating error objects. This proposal further adds to +the functionality of `set -e` with `set -o pipefail` to return an error if any command in a pipeline +fails. This is planned to be equivalent to `set -eo pipefail`. - `set -e` - terminates on command error - `set -u`, a reference to any variable not previously defined results in an error. Similar to From 8603d2b59a4805d2da76b325662bb363d8d4f441 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 28 Oct 2020 08:36:31 -0700 Subject: [PATCH 48/52] Apply suggestions from code review Co-authored-by: James Truher [MSFT] Co-authored-by: Joey Aiello --- 1-Draft/RFC00XX-Native-Command-Error-Handling.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index 01d11ed7..d4f75d57 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -20,7 +20,7 @@ a list. This default behavior is controlled with the preference variable In production, often customers prefer that script execution stops when a non-terminating error occurs. This is particularly true in CI where the preference is to fail fast. PowerShell currently -supports customers with this ability by setting the preference variable in the script. +supports customers with this ability by setting the `ErrorActionPreference` variable in the script. ```Powershell $ErrorActionPreference = 'Stop' @@ -29,7 +29,7 @@ $ErrorActionPreference = 'Stop' Native commands usually return an exit code to the calling application which will be zero for success or non-zero for failure. However, native commands currently do not participate in the PowerShell error stream. Redirected `stderr` output is not interpreted the same as the PowerShell -error stream and many native commands use `stderr` as information/verbose stream and thus only the +error stream as many native commands use `stderr` as information/verbose stream and thus only the exit code matters. Users working with native commands in their scripts will need to check the execution status after each call using a helper function similar to below: @@ -96,7 +96,7 @@ Valid values for `$PSNativeCommandErrorAction` | Stop | Displays the error message and stops executing. In addition to the error generated, the Stop value generates an ActionPreferenceStopException object to the error stream. stream | Suspend | Automatically suspends a workflow job to allow for further investigation. -The reported error record object should be type: `NativeCommandException` with the following details: +The reported error record object will be the new type: `NativeCommandException` with the following details: | Property | Definition ---------------- | ------------------- @@ -179,7 +179,7 @@ a pipeline. Possible values would be: - `$false`: (the default) would ignore `$false` exit status on the last command. This is the same as existing PowerShell treatment of this case. - `$true`: for a pipeline that is being used in a conditional context (see above), and where the - exist status of the last command in the pipeline is `$false`, would create a terminating error + exit status of the last command in the pipeline is `$false`, would create a terminating error from the non-terminating errors in the command error stream. This should improve on the basic specification by allowing the idiom to be usefully combined with From c7e14719c82d99a4a8c2f4073c809590f483ce20 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Wed, 28 Oct 2020 10:11:30 -0700 Subject: [PATCH 49/52] Committee suggestion updates --- .../RFC00XX-Native-Command-Error-Handling.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index d4f75d57..6f0db331 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -45,19 +45,15 @@ support all cases as `$?` can be false from a cmdlet or function error, making ` stale. In POSIX shells, this need to terminate on command error is addressed by the `set -e` configuration, -which causes the shell to exit when a command fails. +which causes the shell to exit when a command fails. In addition, to ensure that an error is +returned if any command in a pipeline fails, POSIX shells address this need with `set -o pipefail` +configuration. This specification proposes a similar idea, but adapted to the PowerShell conventions of preference variables and catchable, self-describing, terminating error objects. This proposal further adds to the functionality of `set -e` with `set -o pipefail` to return an error if any command in a pipeline fails. This is planned to be equivalent to `set -eo pipefail`. -- `set -e` - terminates on command error -- `set -u`, a reference to any variable not previously defined results in an error. Similar to - Set-StrictMode in PowerShell and not needed to be addressed in this RFC. -- `set -o pipefail`, by default, pipeline success is determined by the last command executed. `Set - -o pipefail` returns an error if any command in the pipeline fails. - The specification and alternative proposals are based on the [Equivalent of bash `set -e` #3415](https://github.com/PowerShell/PowerShell/issues/3415) committee review of the associated @@ -71,6 +67,15 @@ commands to first-class PowerShell errors, so that native command failures will objects that are added to the error stream and may terminate execution of the script without added boilerplate. +The specification proposes similar functionality to the common POSIX shell configuration `set -eo pipefail`. + +- `set -e` - terminates on command error +- `set -o pipefail` - returns an error if any command in the pipeline fails. + +> [!NOTE] A common configuration command for POSIX shells `set -euo pipefail` includes the `set -u` +> configuration which returns an error if any variable has not been previously defined. This is +> equivalent to the existing PowerShell `Set-StrictMode` and is not addressed in this RFC. + The `$PSNativeCommandErrorAction` preference variable will implement a version of the `$ErrorActionPreference` variable for native commands. From b9eb257adc2cbc5231c681bfc5814cddaaaba280 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Thu, 29 Oct 2020 09:38:22 -0700 Subject: [PATCH 50/52] Committee suggestion updates --- .../RFC00XX-Native-Command-Error-Handling.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index 6f0db331..29df7d41 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -118,17 +118,6 @@ One way of overriding `$PSStrictNativeCommand` for a single native command and h status explicitly would be to put this logic into a script block and call it with the invocation operator (`&`). -### Add "strict" native command option - -An additional value to the `$PSStrictNativeCommand` preference enum could treat creation of an -`ErrorRecord` for native commands in the same way as this is treated elsewhere. Described here as a -Boolean, could be considered as an enum to allow for future expansion. Possible values are: - -- `$false`: (the default) ignore non-zero exit codes. This is the same as existing PowerShell - treatment of this case. -- `$true`: Populate the error stream of the native command with an `ErrorRecord` associated with an - `ExitException` exception. - ### Modifying existing semantics to consider exit code and exit status The error will throw an exception, potentially terminating the execution, in the same situation as @@ -155,6 +144,17 @@ terminating error on getting an object from the pipeline output stream. Possible This would allow syntax like `if`, `while` and pipeline chain operators to be usefully combined with native commands. +### Add "strict" native command option + +An additional value to the `$PSStrictNativeCommand` preference enum could treat creation of an +`ErrorRecord` for native commands in the same way as this is treated elsewhere. Described here as a +Boolean, could be considered as an enum to allow for future expansion. Possible values are: + +- `$false`: (the default) ignore non-zero exit codes. This is the same as existing PowerShell + treatment of this case. +- `$true`: Populate the error stream of the native command with an `ErrorRecord` associated with an + `ExitException` exception. + #### Sanitize semantics of treating a native command as a conditional value This option in combination with the above enables functionality analogous to bash `set -eo pipefail` From 9642658cb58592b0ba90d8d04121e6dbb11d9d26 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 2 Nov 2020 12:39:05 -0800 Subject: [PATCH 51/52] updated for PSCommittee --- .../RFC00XX-Native-Command-Error-Handling.md | 121 +++--------------- 1 file changed, 15 insertions(+), 106 deletions(-) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index 29df7d41..58564ff8 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -14,13 +14,14 @@ features like those used by cmdlets. ## Motivation In PowerShell by default, script processing continues when non-terminating errors occur. This is a -benefit when expecting non-terminating errors in normal execution such as non-responsive computers from -a list. This default behavior is controlled with the preference variable +benefit when expecting non-terminating errors in normal execution such as non-responsive computers +from a list. This default behavior is controlled with the preference variable `$ErrorActionPreference` default of `Continue`. In production, often customers prefer that script execution stops when a non-terminating error occurs. This is particularly true in CI where the preference is to fail fast. PowerShell currently -supports customers with this ability by setting the `ErrorActionPreference` variable in the script. +supports customers with this ability by setting the `$ErrorActionPreference` variable in the script +to `Stop`. ```Powershell $ErrorActionPreference = 'Stop' @@ -114,111 +115,19 @@ The reported error record object will be the new type: `NativeCommandException` ## Alternative Approaches and Considerations -One way of overriding `$PSStrictNativeCommand` for a single native command and handling its exit +One way of checking for a single native command and handling its exit status explicitly would be to put this logic into a script block and call it with the invocation operator (`&`). -### Modifying existing semantics to consider exit code and exit status - -The error will throw an exception, potentially terminating the execution, in the same situation as -other non-terminating errors will do this, i.e. where `$ErrorActionPreference` is set to `"stop"`. -This would not be the desired behavior on commands where the script already handles a non-zero exit -code, which would require the addition of extra boilerplate to use multiple native commands in -combination. There are a number of ways that this could be made more flexible by integrating exit -code and exit status handling into the language syntax. - -#### Convert non-terminating errors to terminating where the command output is used - -This approach implements semantics equivalent to bash `set -eo pipefail` in the runtime layer. - -The `$PSStrictPipeLine` preference variable would govern promotion of a non-terminating error to a -terminating error on getting an object from the pipeline output stream. Possible values would be: - -- `$false`: (the default) an object can be collected from the pipeline output stream regardless of - the command exit value. This is the same as existing PowerShell treatment of this case. -- `$true`: where the exit status of a native command is `$false`, trying to get an object from its - output stream will create a terminating error from the non-terminating errors in its error stream. - Conversion to boolean would be structured to ensure that this returns `$false` if the output - pipeline does not contain anything without trying to get an actual value from it. - -This would allow syntax like `if`, `while` and pipeline chain operators to be usefully combined with -native commands. - -### Add "strict" native command option - -An additional value to the `$PSStrictNativeCommand` preference enum could treat creation of an -`ErrorRecord` for native commands in the same way as this is treated elsewhere. Described here as a -Boolean, could be considered as an enum to allow for future expansion. Possible values are: - -- `$false`: (the default) ignore non-zero exit codes. This is the same as existing PowerShell - treatment of this case. -- `$true`: Populate the error stream of the native command with an `ErrorRecord` associated with an - `ExitException` exception. - -#### Sanitize semantics of treating a native command as a conditional value - -This option in combination with the above enables functionality analogous to bash `set -eo pipefail` - -PowerShell converts the output stream to a boolean value where a native command is used as a -"condition", i.e. the `-not` operator, or an `if`, `elseif` or `while` statement. This is not -particularly useful with native commands, which would tend to produce no output on success, at least -when executed in batch as opposed to interactive mode. - -The `$PSUseNativeExitStatus` variable would govern whether exit status is used in determining the -boolean value of a native command for a conditional context. Possible values would be: - -- `$false`: (the default) the boolean value of native command is defined as whether or not the - length of the output stream is non-zero. This is the same as existing PowerShell treatment of this - case. -- `$true`: the boolean value of a native command is it's exit status (`$?`), and - -This would allow syntax like `if` and `while` to be usefully combined with native commands. - -#### Add strict pipeline chain failure semantics. - -Treat only ignored exit statuses as exceptions. - -The `$PSStrictPipeLineChain` preference variable would govern the exit status in the last command of -a pipeline. Possible values would be: - -- `$false`: (the default) would ignore `$false` exit status on the last command. This is the same as - existing PowerShell treatment of this case. -- `$true`: for a pipeline that is being used in a conditional context (see above), and where the - exit status of the last command in the pipeline is `$false`, would create a terminating error - from the non-terminating errors in the command error stream. - -This should improve on the basic specification by allowing the idiom to be usefully combined with -pipeline chaining. - -### Use dynamic scope/Set-StrictMode - -This approach implements dynamic scoping for native command error management using a cmdlet. - -Some of the above would be enabled with `Set-StrictMode -version 6` instead of with boolean -preference variables. - -The dynamic scoping approach would improve on earlier listed approaches by limiting the scope of -error handling configuration so that script functions could not have an effect on the error handling -mode in the calling scope. - -If `Set-StrictMode` is used for this, it would need to enable some combination of enhancements that -will not raise errors on scripts that have already implemented strong native command error handling. - -### Use lexical scope/Exception handling extensions - -Dynamic scoping approach would have side-effects on called scripts. This is analogous to the -behavior of Bourne type shells, which maintain this behavior for -[historic compatibility](http://austingroupbugs.net/view.php?id=52) reasons. - -Lexical scoping of native command error handling would improve on earlier options by integrating -native command error handling fully into the existing exception handling without any -side-effects in calling or called scripts. +```Powershell +if ($LASTEXITCODE -ne 0) +{ + throw "Command failed. See above errors for details" +} + ``` -With this approach, native command error handling mode would be used through language syntax instead -of preference variables or cmdlets. A possible syntax might be to add a strictness option to the try -statement which applies to the lexical scope of the try statement. +### Set-StrictMode -Lexical scope requires more runtime overhead; a mapping must be maintained at runtime between each -runtime scope and its corresponding lexical scope that existed at parse-time. In addition, lexical -scope may not apply well to errors. Errors produce stack traces at runtime and should be handled in -a runtime-facing way. For these reasons, this alternative is not under consideration. +A common configuration command for POSIX shells `set -euo pipefail` includes the `set -u` +configuration which returns an error if any variable has not been previously defined. This is +equivalent to the existing PowerShell `Set-StrictMode` and is not needed to be addressed in this RFC. From e46b595c07c2f91c0f6d975106203294407f68f4 Mon Sep 17 00:00:00 2001 From: Jason Helmick Date: Mon, 2 Nov 2020 13:21:31 -0800 Subject: [PATCH 52/52] updated for PSCommittee --- 1-Draft/RFC00XX-Native-Command-Error-Handling.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/1-Draft/RFC00XX-Native-Command-Error-Handling.md b/1-Draft/RFC00XX-Native-Command-Error-Handling.md index 58564ff8..f80e83f3 100644 --- a/1-Draft/RFC00XX-Native-Command-Error-Handling.md +++ b/1-Draft/RFC00XX-Native-Command-Error-Handling.md @@ -131,3 +131,10 @@ if ($LASTEXITCODE -ne 0) A common configuration command for POSIX shells `set -euo pipefail` includes the `set -u` configuration which returns an error if any variable has not been previously defined. This is equivalent to the existing PowerShell `Set-StrictMode` and is not needed to be addressed in this RFC. + +### Preference variable resolves error handling conflicts + +In cases where an existing script already handles non-zero native command errors, the preference +variable `$PSNativeCommandErrorAction` may be set to `Ignore`. Error handling behavior of the +PowerShell cmdlets is handled separately with `$ErrorActionPreference`. +