From 58a6a1b438a74b61875c2d12068a3b05d568412c Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 12:20:10 +0300 Subject: [PATCH 01/27] refactored parameters, and started implementation for using sysmail_profile --- sql_clr_ics/clr_send_ics_invite.cs | 100 ++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 30 deletions(-) diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 1fbf1ce..75460f2 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -3,26 +3,70 @@ using System.Net; using System.Net.Mail; using System.Data.SqlTypes; +using System.Data.SqlClient; +using Microsoft.SqlServer.Server; public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void clr_send_ics_invite( - SqlString from, SqlString to, SqlString cc, SqlString reply_to - , SqlString subject, SqlString body, SqlString location - , SqlDateTime start_time_utc, SqlDateTime end_time_utc, SqlDateTime timestamp_utc - , SqlString smtp_server, SqlInt32 port, SqlBoolean use_ssl, SqlString username, SqlString password + SqlString profile_name + , SqlString recipients, SqlString copy_recipients, SqlString blind_copy_recipients + , SqlString from_address, SqlString reply_to + , SqlString subject, SqlString body + , SqlString importance, SqlString sensitivity, SqlString file_attachments + , SqlString location, SqlDateTime start_time_utc, SqlDateTime end_time_utc, SqlDateTime timestamp_utc + , SqlString method, SqlInt32 sequence, SqlString prod_id , SqlBoolean use_reminder, SqlInt32 reminder_minutes, SqlBoolean require_rsvp - , SqlGuid cancel_event_identifier, out SqlGuid event_identifier + , SqlString smtp_servername, SqlInt32 port, SqlBoolean enable_ssl + , SqlString username, SqlString password , SqlBoolean suppress_info_messages + , ref SqlGuid event_identifier ) { + #region get missing info from sysmail profile + + if (from_address.IsNull) + { + SqlConnection con = new SqlConnection("context connection=true"); // using existing CLR context connection + SqlCommand cmd = con.CreateCommand(); + con.Open(); + + if (profile_name.IsNull) + { + cmd.CommandText = @"SELECT p.name +FROM [msdb].[dbo].[sysmail_principalprofile] AS pp +INNER JOIN [msdb].[dbo].[sysmail_profile] AS p +ON pp.profile_id = p.profile_id +WHERE pp.is_default = 1"; + + using (SqlDataReader rdr = cmd.ExecuteReader()) + { + if (!rdr.HasRows) + { + rdr.Close(); + con.Close(); + throw new Exception("profile_name not specified and no default profile found"); + } else + { + profile_name = rdr.GetSqlString(0); + } + rdr.Close(); + } + } + + + con.Close(); + } + + #endregion get missing info from sysmail profile + #region validations StringBuilder sb_Errors = new StringBuilder(); - if (from.IsNull || String.IsNullOrEmpty(from.Value)) sb_Errors.AppendLine("Missing parameter: from"); - if (to.IsNull || String.IsNullOrEmpty(to.Value)) sb_Errors.AppendLine("Missing parameter: to"); + if (from_address.IsNull || String.IsNullOrEmpty(from_address.Value)) sb_Errors.AppendLine("Missing parameter: from"); + if (recipients.IsNull || String.IsNullOrEmpty(recipients.Value)) sb_Errors.AppendLine("Missing parameter: to"); if (subject.IsNull || String.IsNullOrEmpty(subject.Value)) sb_Errors.AppendLine("Missing parameter: subject"); if (sb_Errors.Length > 0) throw new Exception("Unable to send mail due to validation error(s): " + sb_Errors); @@ -36,10 +80,11 @@ public static void clr_send_ics_invite( if (reminder_minutes.IsNull) reminder_minutes = 15; if (use_reminder.IsNull) use_reminder = true; if (suppress_info_messages.IsNull) suppress_info_messages = false; + if (prod_id.IsNull || String.IsNullOrEmpty(prod_id.Value)) prod_id = "-//Schedule a Meeting"; - if (smtp_server.IsNull || String.IsNullOrEmpty(smtp_server.Value)) smtp_server = "localhost"; + if (smtp_servername.IsNull || String.IsNullOrEmpty(smtp_servername.Value)) smtp_servername = "localhost"; if (port.IsNull) port = 25; - if (use_ssl.IsNull) use_ssl = false; + if (enable_ssl.IsNull) enable_ssl = false; if (timestamp_utc.IsNull) timestamp_utc = DateTime.UtcNow; bool useDefaultCredentials = false; @@ -55,14 +100,9 @@ public static void clr_send_ics_invite( credentials = new NetworkCredential(username.Value, password.Value); } - if (!cancel_event_identifier.IsNull) - event_identifier = cancel_event_identifier.Value; - else - event_identifier = Guid.NewGuid(); - #endregion default values initialization - #region initialize MailMessage and recipients +#region initialize MailMessage and recipients MailMessage msg = new MailMessage(); msg.Subject = subject.Value; @@ -70,7 +110,7 @@ public static void clr_send_ics_invite( try { - msg.From = new MailAddress(from.Value); + msg.From = new MailAddress(from_address.Value); } catch (Exception e) { @@ -88,7 +128,7 @@ public static void clr_send_ics_invite( try { - msg.To.Add(to.Value.Replace(';', ',')); + msg.To.Add(recipients.Value.Replace(';', ',')); } catch (Exception e) { @@ -97,28 +137,28 @@ public static void clr_send_ics_invite( try { - if (!cc.IsNull && !String.IsNullOrEmpty(cc.Value)) msg.CC.Add(cc.Value.Replace(';', ',')); + if (!copy_recipients.IsNull && !String.IsNullOrEmpty(copy_recipients.Value)) msg.CC.Add(copy_recipients.Value.Replace(';', ',')); } catch (Exception e) { throw new Exception("CC address is invalid: " + e.Message); } - #endregion initialize MailMessage and recipients +#endregion initialize MailMessage and recipients - #region construct ICS file contents +#region construct ICS file contents StringBuilder str = new StringBuilder(); str.AppendLine("BEGIN:VCALENDAR"); - str.AppendLine("PRODID:-//Schedule a Meeting"); + str.AppendLine(string.Format("PRODID:{0}", prod_id.Value)); str.AppendLine("VERSION:2.0"); - if (cancel_event_identifier.IsNull) + if (method == "request") { str.AppendLine("METHOD:REQUEST"); str.AppendLine("SEQUENCE:0"); } - else + else if (method == "cancel") { str.AppendLine("METHOD:CANCEL"); str.AppendLine("SEQUENCE:1"); @@ -146,7 +186,7 @@ public static void clr_send_ics_invite( if (!organizer_in_recipients) str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); - if (use_reminder && cancel_event_identifier.IsNull) + if (use_reminder && method.IsNull) { str.AppendLine("BEGIN:VALARM"); str.AppendLine(string.Format("TRIGGER:-PT{0}M", reminder_minutes.Value)); @@ -158,18 +198,18 @@ public static void clr_send_ics_invite( str.AppendLine("END:VEVENT"); str.AppendLine("END:VCALENDAR"); - #endregion construct ICS file contents +#endregion construct ICS file contents - #region initialize and configure SmtpClient +#region initialize and configure SmtpClient System.Net.Mail.SmtpClient smtpclient = new System.Net.Mail.SmtpClient(); try { - smtpclient.Host = smtp_server.Value; + smtpclient.Host = smtp_servername.Value; smtpclient.Port = port.Value; smtpclient.UseDefaultCredentials = useDefaultCredentials; - smtpclient.EnableSsl = use_ssl.Value; + smtpclient.EnableSsl = enable_ssl.Value; smtpclient.Credentials = credentials; System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar"); contype.Parameters.Add("method", "REQUEST"); @@ -187,13 +227,13 @@ public static void clr_send_ics_invite( throw new Exception("SMTP Client Configuration Error: " + e.Message); } - #endregion initialize and configure SmtpClient +#endregion initialize and configure SmtpClient try { smtpclient.Send(msg); if (!suppress_info_messages) - Microsoft.SqlServer.Server.SqlContext.Pipe.Send(string.Format("Mail Sent. Event Identifier: {0}", event_identifier.Value)); + SqlContext.Pipe.Send(string.Format("Mail Sent. Event Identifier: {0}", event_identifier.Value)); } catch (Exception e) { From 3437a86e8f5388dd66b66b49aeabbdad9c7f6fa1 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 12:20:58 +0300 Subject: [PATCH 02/27] Update README.md --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 25b62ca..2758c85 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,81 @@ -# sql_clr_ics +# sql_clr_ics: clr_send_ics_invite -Send Calendar Invites from within SQL Server using a CLR stored procedure. +Send Calendar Event / Appointment Invitations (iCal formatted file) from within SQL Server using a CLR stored procedure ## Prerequisites -The CLR assembly in this project can only be deployed to a database with the trustworthy setting on, due to the assembly requiring the unsafe permission set. +The CLR assembly in this project can only be deployed to a database with the **trustworthy** setting on, due to the assembly requiring the **UNSAFE permission set**. ## Installation If you have SSDT, you can open the SQL server project and publish it to your database of choice. Alternatively, you can use [this simple installation script](https://github.com/EitanBlumin/sql_clr_ics/blob/master/sql_clr_ics/sql_clr_ics_install.sql) that sets everything up for you in your database of choice. -## Usage +## Syntax -Tba +``` +exec clr_send_ics_invite + [ @from = ] 'sender' + , [ @to = ] 'recipients [ ; ...n ]' + [ , [ @cc = ] 'copy_recipients [ ; ...n ]' ] + [ , [ @reply_to = ] 'reply_to' ] + [ , [ @subject = ] 'subject' ] + [ , [ @body = ] 'body' ] + [ , [ @location = ] 'location' ] + [ , [ @start_time_utc = ] 'start_time_utc' ] + [ , [ @end_time_utc = ] 'end_time_utc' ] + [ , [ @timestamp_utc = ] 'timestamp_utc' ] + [ , [ @smtp_server = ] 'smtp_server' ] + [ , [ @port = ] port ] + [ , [ @use_ssl = ] use_ssl ] + [ , [ @username = ] 'username' ] + [ , [ @password = ] 'password' ] + [ , [ @use_reminder = ] use_reminder ] + [ , [ @reminder_minutes = ] reminder_minutes ] + [ , [ @require_rsvp = ] require_rsvp ] + [ , [ @cancel_event_identifier = ] 'cancel_event_identifier' ] + [ , [ @event_identifier = ] @event_identifier OUTPUT ] + [ , [ @suppress_info_messages = ] suppress_info_messages ] +``` + +## Arguments + +|Parameter|Type|Default|Description| +|---|---|---|---| +| `@from` | nvarchar(4000) | _no default_ | Must be a valid single e-mail address from which the invite will be sent. | +| `@to` | nvarchar(4000) | _no default_ | Accepts a list of e-mail addresses (at least one) to be invited as required partisipants, separated by either a comma or a semicolon. | +| `@cc` | nvarchar(4000) | _null_ | Optional parameter. Accepts a list of e-mail addresses (at least one) to be used as CC, separated by either a comma or a semicolon. | +| `@reply_to` | nvarchar(4000) | _null_ | Optional parameter. Accepts an e-mail address to be used as the Reply To address (if different from the `@from` address. | +| `@subject` | nvarchar(4000) | _no default_ | Mandatory parameter. A text string to be used as the meeting / e-mail's subject. | +| `@body` | nvarchar(4000) | _null_ | Optional parameter. A text string to be used as the e-mail's HTML body. | +| `@location` | nvarchar(4000) | _null_ | Optional parameter. Sets the location for the meeting. | +| `@start_time_utc` | datetime | _UTC now + 5 hours_ | Optional parameter. Sets the start time (in UTC) of the meeting. If not specified, by default will be set as **UTC now + 5 hours**. | +| `@end_time_utc` | datetime | _@start_time_utc + 1 hour_ | Optional parameter. Sets the end time (in UTC) of the meeting. If not specified, by default will be set as **`@start_time_utc` + 1 hour**. | +| `@timestamp_utc` | datetime | _UTC now_ | Optional parameter. Sets the DTSTAMP section of the iCal (usually used for consistent updating of meeting invites). If not specified, by default will be set as **UTC now**. | +| `@smtp_server` | nvarchar(4000) | _localhost_ | Optional parameter. Sets the SMTP host name to be used for sending the e-mail. If not specified, by default will be set as **"localhost"**. | +| `@port` | int | _25_ | Optional parameter. Sets the SMTP port to be used for sending the e-mail. If not specified, by default will be set as **25**. | +| `@use_ssl` | bit | _0_ | Optional parameter. Sets whether to use SSL authentication for the SMTP server. If not specified, by default will be set as **0 (false)**. | +| `@username` | nvarchar(4000) | _null (use current Network Credentials)_ | Optional parameter. Sets the username to use when authenticating against the SMTP server. If not specified, by default the **current Network Credentials** will be used (of the SQL Server service). | +| `@password` | nvarchar(4000) | _empty string | Optional parameter. Sets the password to use when authenticating against the SMTP server. Only used when `@username` is also specified. By default, will use an **empty string**. | +| `@use_reminder` | bit | _1_ | Optional parameter. Sets whether to set a reminder for the meeting. By default is set to **1 (true)**. | +| `@reminder_minutes` | int | _15_ | If `@use_reminder` is enabled, this parameter will be used for setting the reminder time in minutes. By default is set to **15**. | +| `@require_rsvp` | bit | _0_ | If set to 0 (false), then participants will not be required to respond with RSVP, and their participation is automatically set as ACCEPTED. If set to 1 (true), then participants will be required to respond with RSVP, and their participation is automatically set as NEEDS-ACTION. By default set to **0 (false)**. | +| `@cancel_event_identifier` | uniqueidentifier | _null_ | You may specify a value for this parameter, if you want to cancel an event that you've already sent. Use the corresponding event's identifier. | +| `@event_identifier` | uniqueidentifier | _null_ | Output parameter. Returns the event's GUID, which can later be used for cancellation. If `@cancel_event_identifier` was specified, the same GUID will be returned. | +| `@suppress_info_messages` | bit | _0_ | If set to 0, an informational message will be printed upon successful delivery of the invitation ( ex. "Mail Sent. Event Identifier: 1234-1234-1234-1234" ). If set to 1, this message will not be printed. By default is set to **0 (false)**. | ## License and copyright -This project is licensed under the MIT license agreement. +This project is copyrighted by Eitan Blumin, and licensed under the MIT license agreement. + More info in [the license file](https://github.com/EitanBlumin/sql_clr_ics/blob/master/LICENSE). ## Acknowledgements -This project was based on several stack overflow discussions. +This project was based mostly on the following stack overflow discussion: + +[https://stackoverflow.com/questions/22734403/send-email-to-outlook-with-ics-meeting-appointment](https://stackoverflow.com/questions/22734403/send-email-to-outlook-with-ics-meeting-appointment) + +Also used the iCal specification for further improvements: + +[https://www.kanzaki.com/docs/ical/](https://www.kanzaki.com/docs/ical/) From 6841afd041b197658c2f2f8fcef2d29a2f4b0ae0 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 15:49:08 +0300 Subject: [PATCH 03/27] first draft --- sql_clr_ics/Script.PostDeployment.sql | 4 +- sql_clr_ics/clr_send_ics_invite.cs | 267 ++++++++++++++++++++------ 2 files changed, 214 insertions(+), 57 deletions(-) diff --git a/sql_clr_ics/Script.PostDeployment.sql b/sql_clr_ics/Script.PostDeployment.sql index 491d354..9af4b27 100644 --- a/sql_clr_ics/Script.PostDeployment.sql +++ b/sql_clr_ics/Script.PostDeployment.sql @@ -3,7 +3,6 @@ Post-Deployment Script --------------------------------------------------- This script re-creates the CLR stored procedure with default values for parameters (which is not possible natively) -*/ IF OBJECT_ID('clr_send_ics_invite') IS NOT NULL DROP PROCEDURE [dbo].[clr_send_ics_invite] GO SET ANSI_NULLS OFF @@ -35,4 +34,5 @@ CREATE PROCEDURE [dbo].[clr_send_ics_invite] WITH EXECUTE AS CALLER AS EXTERNAL NAME [sql_clr_ics].[StoredProcedures].[clr_send_ics_invite] -GO \ No newline at end of file +GO +*/ diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 75460f2..d84b8b0 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -8,25 +8,53 @@ public partial class StoredProcedures { - [Microsoft.SqlServer.Server.SqlProcedure] + private enum iCalMethods + { + PUBLISH, + REQUEST, + REPLY, + CANCEL, + ADD, + REFRESH + } + + private enum iCalClass + { + PUBLIC, + PRIVATE, + CONFIDENTIAL + } + + private static string[] iCalRoles = { "REQ-PARTICIPANT", "OPT-PARTICIPANT", "NON-PARTICIPANT", "CHAIR" }; + + [SqlProcedure] public static void clr_send_ics_invite( SqlString profile_name , SqlString recipients, SqlString copy_recipients, SqlString blind_copy_recipients , SqlString from_address, SqlString reply_to - , SqlString subject, SqlString body + , SqlString subject, SqlString body, SqlString body_format , SqlString importance, SqlString sensitivity, SqlString file_attachments , SqlString location, SqlDateTime start_time_utc, SqlDateTime end_time_utc, SqlDateTime timestamp_utc , SqlString method, SqlInt32 sequence, SqlString prod_id , SqlBoolean use_reminder, SqlInt32 reminder_minutes, SqlBoolean require_rsvp + , SqlString recipients_role, SqlString copy_recipients_role, SqlString blind_copy_recipients_role , SqlString smtp_servername, SqlInt32 port, SqlBoolean enable_ssl , SqlString username, SqlString password , SqlBoolean suppress_info_messages - , ref SqlGuid event_identifier + , ref SqlString event_identifier ) { - #region get missing info from sysmail profile +#region local variable declaration - if (from_address.IsNull) + bool use_default_credentials = false; + ICredentialsByHost credentials = CredentialCache.DefaultNetworkCredentials; + MailPriority mailPriority; + +#endregion local variable declaration + +#region get missing info from sysmail profile + + if (from_address.IsNull || !profile_name.IsNull) { SqlConnection con = new SqlConnection("context connection=true"); // using existing CLR context connection SqlCommand cmd = con.CreateCommand(); @@ -55,58 +83,155 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p } } - + cmd.CommandText = @"SELECT TOP 1 a.email_address, a.replyto_address, s.servername, s.port, s.enable_ssl, s.use_default_credentials, s.username +FROM [msdb].[dbo].[sysmail_profile] AS p +INNER JOIN [msdb].[dbo].[sysmail_profileaccount] AS pa +ON p.profile_id = pa.profile_id +AND pa.sequence_number >= @Seq +INNER JOIN [msdb].[dbo].[sysmail_account] AS a +ON pa.account_id = a.account_id +INNER JOIN [msdb].[dbo].[sysmail_server] AS s +ON p.profile_id = s.account_id +WHERE p.name = @Profile +ORDER BY pa.sequence_number ASC"; + + cmd.Parameters.AddWithValue("@Seq", 1); + cmd.Parameters.AddWithValue("@Profile", profile_name.Value); + + using (SqlDataReader rdr = cmd.ExecuteReader()) + { + if (!rdr.HasRows) + { + rdr.Close(); + con.Close(); + throw new Exception(string.Format("profile_name '{0}' not found", profile_name.Value)); + } + else + { + if (from_address.IsNull) from_address = rdr.GetSqlString(0); + if (reply_to.IsNull) reply_to = rdr.GetSqlString(1); + if (smtp_servername.IsNull) smtp_servername = rdr.GetSqlString(2); + if (port.IsNull) port = rdr.GetSqlInt32(3); + if (enable_ssl.IsNull) enable_ssl = rdr.GetSqlBoolean(4); + use_default_credentials = rdr.GetSqlBoolean(5).Value; + if (username.IsNull && !use_default_credentials) username = rdr.GetSqlString(6); + } + rdr.Close(); + } con.Close(); } #endregion get missing info from sysmail profile - #region validations - - StringBuilder sb_Errors = new StringBuilder(); - - if (from_address.IsNull || String.IsNullOrEmpty(from_address.Value)) sb_Errors.AppendLine("Missing parameter: from"); - if (recipients.IsNull || String.IsNullOrEmpty(recipients.Value)) sb_Errors.AppendLine("Missing parameter: to"); - if (subject.IsNull || String.IsNullOrEmpty(subject.Value)) sb_Errors.AppendLine("Missing parameter: subject"); - - if (sb_Errors.Length > 0) throw new Exception("Unable to send mail due to validation error(s): " + sb_Errors); - - #endregion validations +#region default values initialization - #region default values initialization - - if (start_time_utc.IsNull) start_time_utc = DateTime.Now.AddMinutes(+300); + if (subject.IsNull || string.IsNullOrEmpty(subject.Value)) subject = "Meeting"; + if (body_format.IsNull || string.IsNullOrEmpty(body_format.Value)) body_format = "TEXT"; + if (timestamp_utc.IsNull) timestamp_utc = DateTime.UtcNow; + if (start_time_utc.IsNull) start_time_utc = timestamp_utc.Value.AddMinutes(+300); if (end_time_utc.IsNull) end_time_utc = start_time_utc.Value.AddMinutes(+60); if (reminder_minutes.IsNull) reminder_minutes = 15; if (use_reminder.IsNull) use_reminder = true; if (suppress_info_messages.IsNull) suppress_info_messages = false; - if (prod_id.IsNull || String.IsNullOrEmpty(prod_id.Value)) prod_id = "-//Schedule a Meeting"; + if (prod_id.IsNull || string.IsNullOrEmpty(prod_id.Value)) prod_id = "Schedule a Meeting"; + if (importance.IsNull || string.IsNullOrEmpty(importance.Value)) importance = "Normal"; + if (sensitivity.IsNull || string.IsNullOrEmpty(sensitivity.Value)) sensitivity = "Public"; - if (smtp_servername.IsNull || String.IsNullOrEmpty(smtp_servername.Value)) smtp_servername = "localhost"; + if (smtp_servername.IsNull || string.IsNullOrEmpty(smtp_servername.Value)) smtp_servername = "localhost"; if (port.IsNull) port = 25; if (enable_ssl.IsNull) enable_ssl = false; - if (timestamp_utc.IsNull) timestamp_utc = DateTime.UtcNow; - bool useDefaultCredentials = false; - ICredentialsByHost credentials = System.Net.CredentialCache.DefaultNetworkCredentials; - - if (username.IsNull || String.IsNullOrEmpty(username.Value)) + if (username.IsNull || string.IsNullOrEmpty(username.Value)) { - useDefaultCredentials = true; + use_default_credentials = true; } else { - if (password.IsNull || String.IsNullOrEmpty(password.Value)) password = ""; + if (password.IsNull || string.IsNullOrEmpty(password.Value)) password = ""; credentials = new NetworkCredential(username.Value, password.Value); } + if (recipients_role.IsNull) recipients_role = "REQ-PARTICIPANT"; + if (copy_recipients_role.IsNull) copy_recipients_role = "OPT-PARTICIPANT"; + if (blind_copy_recipients_role.IsNull) blind_copy_recipients_role = "NON-PARTICIPANT"; + + if (method.IsNull) method = "REQUEST"; + if (sequence.IsNull) sequence = (method.Value == "CANCEL" ? 1 : 0); + if (event_identifier.IsNull) event_identifier = Guid.NewGuid().ToString(); + #endregion default values initialization + #region validations + + StringBuilder sb_Errors = new StringBuilder(); + + if (from_address.IsNull || string.IsNullOrEmpty(from_address.Value)) sb_Errors.AppendLine("Missing sender: Please specify @from_address"); + if ( + (recipients.IsNull || string.IsNullOrEmpty(recipients.Value)) + && (copy_recipients.IsNull || string.IsNullOrEmpty(copy_recipients.Value)) + && (blind_copy_recipients.IsNull || string.IsNullOrEmpty(blind_copy_recipients.Value)) + ) + sb_Errors.AppendLine("Missing recipients: Please specify either @recipients, @copy_recipients or @blind_copy_recipients"); + + if (body_format.Value != "HTML" && body_format.Value != "TEXT") sb_Errors.AppendLine(string.Format("@body_format {0} is invalid. Valid values: TEXT, HTML", body_format.Value)); + if (!Enum.TryParse(method.Value, true, out iCalMethods method_enumvalue)) sb_Errors.AppendLine(string.Format("@method {0} is invalid. Valid values: {1}", method.Value, Enum.GetNames(typeof(iCalMethods)).ToString().ToUpper())); + if (!Enum.TryParse(sensitivity.Value, true, out iCalClass sensitivity_enumvalue)) sb_Errors.AppendLine(string.Format("sensitivity {0} is invalid. Valid values: {1}", sensitivity.Value, Enum.GetNames(typeof(iCalClass)).ToString().ToUpper())); + if (!Enum.TryParse(importance.Value, true, out mailPriority)) sb_Errors.AppendLine(string.Format("@importance {0} is invalid. Valid values: {1}", importance.Value, Enum.GetNames(typeof(MailPriority)).ToString().ToUpper())); + + bool recipient_role_found = false; + bool copy_recipient_role_found = false; + bool blind_copy_recipient_role_found = false; + + foreach (var item in iCalRoles) + { + if (!recipients.IsNull && item == recipients_role.Value) + { + recipient_role_found = true; + } + if (!copy_recipients.IsNull && item == copy_recipients_role.Value) + { + copy_recipient_role_found = true; + } + if (!blind_copy_recipients.IsNull && item == blind_copy_recipients_role.Value) + { + blind_copy_recipient_role_found = true; + } + if (recipient_role_found && copy_recipient_role_found && blind_copy_recipient_role_found) + { + break; + } + } + + if (!recipients.IsNull && !recipient_role_found) sb_Errors.AppendLine(string.Format("@recipients_role {0} is invalid. Valid values: {1}", recipients_role.Value, iCalRoles.ToString())); + if (!copy_recipients.IsNull && !copy_recipient_role_found) sb_Errors.AppendLine(string.Format("@copy_recipients_role {0} is invalid. Valid values: {1}", copy_recipients_role.Value, iCalRoles.ToString())); + if (!blind_copy_recipients.IsNull && !blind_copy_recipient_role_found) sb_Errors.AppendLine(string.Format("@blind_copy_recipients_role {0} is invalid. Valid values: {1}", blind_copy_recipients_role.Value, iCalRoles.ToString())); + + if (sb_Errors.Length > 0) throw new Exception("Unable to send mail due to validation error(s): " + sb_Errors); + + #endregion validations + #region initialize MailMessage and recipients MailMessage msg = new MailMessage(); msg.Subject = subject.Value; msg.Body = body.Value; + msg.Priority = mailPriority; + msg.IsBodyHtml = true; + + if (!file_attachments.IsNull) + { + foreach (var att in file_attachments.Value.Split(';')) + { + try + { + msg.Attachments.Add(new Attachment(att)); + } + catch (Exception e) + { + throw new Exception(string.Format("Unable to attach '{0}': {1}", att, e.Message)); + } + } + } try { @@ -114,16 +239,16 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p } catch (Exception e) { - throw new Exception("From address is invalid: " + e.Message); + throw new Exception("@from_address is invalid: " + e.Message); } try { - if (!reply_to.IsNull && !String.IsNullOrEmpty(reply_to.Value)) msg.ReplyToList.Add(reply_to.Value.Replace(';', ',')); + if (!reply_to.IsNull && !string.IsNullOrEmpty(reply_to.Value)) msg.ReplyToList.Add(reply_to.Value.Replace(';', ',')); } catch (Exception e) { - throw new Exception("ReplyTo address is invalid: " + e.Message); + throw new Exception("@reply_to is invalid: " + e.Message); } try @@ -132,38 +257,38 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p } catch (Exception e) { - throw new Exception("To address is invalid: " + e.Message); + throw new Exception("@recipients is invalid: " + e.Message); + } + + try + { + if (!copy_recipients.IsNull && !string.IsNullOrEmpty(copy_recipients.Value)) msg.CC.Add(copy_recipients.Value.Replace(';', ',')); + } + catch (Exception e) + { + throw new Exception("@copy_recipients is invalid: " + e.Message); } try { - if (!copy_recipients.IsNull && !String.IsNullOrEmpty(copy_recipients.Value)) msg.CC.Add(copy_recipients.Value.Replace(';', ',')); + if (!blind_copy_recipients.IsNull && !string.IsNullOrEmpty(blind_copy_recipients.Value)) msg.Bcc.Add(blind_copy_recipients.Value.Replace(';', ',')); } catch (Exception e) { - throw new Exception("CC address is invalid: " + e.Message); + throw new Exception("@blind_copy_recipients is invalid: " + e.Message); } -#endregion initialize MailMessage and recipients + #endregion initialize MailMessage and recipients #region construct ICS file contents StringBuilder str = new StringBuilder(); str.AppendLine("BEGIN:VCALENDAR"); - str.AppendLine(string.Format("PRODID:{0}", prod_id.Value)); + str.AppendLine(string.Format("PRODID:-//{0}", prod_id.Value)); str.AppendLine("VERSION:2.0"); - - if (method == "request") - { - str.AppendLine("METHOD:REQUEST"); - str.AppendLine("SEQUENCE:0"); - } - else if (method == "cancel") - { - str.AppendLine("METHOD:CANCEL"); - str.AppendLine("SEQUENCE:1"); - } - + str.AppendLine(string.Format("METHOD:{0}", method.Value.ToUpper())); + str.AppendLine(string.Format("SEQUENCE:{0}", sequence.Value)); + str.AppendLine("BEGIN:VEVENT"); str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", start_time_utc.Value)); str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", timestamp_utc.Value)); @@ -174,6 +299,22 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body)); str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject)); str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); + str.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); + + switch (mailPriority) + { + case MailPriority.Normal: + str.AppendLine("PRIORITY:5"); + break; + case MailPriority.Low: + str.AppendLine("PRIORITY:9"); + break; + case MailPriority.High: + str.AppendLine("PRIORITY:1"); + break; + default: + break; + } string rsvp_string = (require_rsvp.Value ? "PARTSTAT=NEEDS-ACTION;RSVP=TRUE" : "PARTSTAT=ACCEPTED;RSVP=FALSE"); bool organizer_in_recipients = false; @@ -181,12 +322,24 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p foreach (MailAddress addr in msg.To) { if (addr.Address == msg.From.Address) organizer_in_recipients = true; - str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string)); + str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, recipients_role.Value.ToUpper())); + } + + foreach (MailAddress addr in msg.CC) + { + if (addr.Address == msg.From.Address) organizer_in_recipients = true; + str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, copy_recipients_role.Value.ToUpper())); + } + + foreach (MailAddress addr in msg.Bcc) + { + if (addr.Address == msg.From.Address) organizer_in_recipients = true; + str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, blind_copy_recipients_role.Value.ToUpper())); } if (!organizer_in_recipients) str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); - if (use_reminder && method.IsNull) + if (use_reminder && method.Value != "CANCEL") { str.AppendLine("BEGIN:VALARM"); str.AppendLine(string.Format("TRIGGER:-PT{0}M", reminder_minutes.Value)); @@ -202,17 +355,17 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p #region initialize and configure SmtpClient - System.Net.Mail.SmtpClient smtpclient = new System.Net.Mail.SmtpClient(); + SmtpClient smtpclient = new SmtpClient(); try { smtpclient.Host = smtp_servername.Value; smtpclient.Port = port.Value; - smtpclient.UseDefaultCredentials = useDefaultCredentials; + smtpclient.UseDefaultCredentials = use_default_credentials; smtpclient.EnableSsl = enable_ssl.Value; smtpclient.Credentials = credentials; System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar"); - contype.Parameters.Add("method", "REQUEST"); + contype.Parameters.Add("method", method.Value.ToUpper()); contype.Parameters.Add("name", "Meeting.ics"); AlternateView HTML = AlternateView.CreateAlternateViewFromString(body.Value, new System.Net.Mime.ContentType("text/html")); @@ -227,7 +380,9 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p throw new Exception("SMTP Client Configuration Error: " + e.Message); } -#endregion initialize and configure SmtpClient + #endregion initialize and configure SmtpClient + +#region send mail try { @@ -239,5 +394,7 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p { throw new Exception("Error sending mail: " + e.Message); } + +#endregion send mail } } \ No newline at end of file From a8f076e7bae2cbf9644193c62617959cac45d29f Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 16:05:41 +0300 Subject: [PATCH 04/27] some fixes --- sql_clr_ics/Script.PostDeployment.sql | 49 ++++++++++++++++----------- sql_clr_ics/clr_send_ics_invite.cs | 14 ++++++-- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/sql_clr_ics/Script.PostDeployment.sql b/sql_clr_ics/Script.PostDeployment.sql index 9af4b27..ad47a30 100644 --- a/sql_clr_ics/Script.PostDeployment.sql +++ b/sql_clr_ics/Script.PostDeployment.sql @@ -3,6 +3,7 @@ Post-Deployment Script --------------------------------------------------- This script re-creates the CLR stored procedure with default values for parameters (which is not possible natively) +*/ IF OBJECT_ID('clr_send_ics_invite') IS NOT NULL DROP PROCEDURE [dbo].[clr_send_ics_invite] GO SET ANSI_NULLS OFF @@ -10,29 +11,39 @@ GO SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[clr_send_ics_invite] - @from [nvarchar](4000), - @to [nvarchar](4000), - @cc [nvarchar](4000) = null, - @reply_to [nvarchar](4000) = null, - @subject [nvarchar](4000), - @body [nvarchar](4000) = null, - @location [nvarchar](4000) = null, - @start_time_utc [datetime] = null, - @end_time_utc [datetime] = null, - @timestamp_utc [datetime] = null, - @smtp_server [nvarchar](4000) = null, - @port [int] = 25, - @use_ssl [bit] = 0, - @username [nvarchar](4000) = null, - @password [nvarchar](4000) = null, + @profile_name [nvarchar](4000) = NULL, + @recipients [nvarchar](4000) = NULL, + @copy_recipients [nvarchar](4000) = NULL, + @blind_copy_recipients [nvarchar](4000) = NULL, + @from_address [nvarchar](4000) = NULL, + @reply_to [nvarchar](4000) = NULL, + @subject [nvarchar](4000) = N'Meeting', + @body [nvarchar](4000) = NULL, + @body_format [nvarchar](4) = N'TEXT', + @importance [nvarchar](6) = N'Normal', + @sensitivity [nvarchar](12) = N'Public', + @file_attachments [nvarchar](4000) = NULL, + @location [nvarchar](4000) = NULL, + @start_time_utc [datetime] = NULL, + @end_time_utc [datetime] = NULL, + @timestamp_utc [datetime] = NULL, + @method [nvarchar](14) = N'REQUEST', + @sequence [int] = 0, + @prod_id [nvarchar](4000) = NULL, @use_reminder [bit] = 1, @reminder_minutes [int] = 15, @require_rsvp [bit] = 0, - @cancel_event_identifier [uniqueidentifier] = null, - @event_identifier [uniqueidentifier] = null OUTPUT, - @suppress_info_messages [bit] = 0 + @recipients_role [nvarchar](15) = N'REQ-PARTICIPANT', + @copy_recipients_role [nvarchar](15) = N'OPT-PARTICIPANT', + @blind_copy_recipients_role [nvarchar](15) = N'NON-PARTICIPANT', + @smtp_servername [nvarchar](4000) = N'localhost', + @port [int] = 25, + @enable_ssl [bit] = 0, + @username [nvarchar](4000) = NULL, + @password [nvarchar](4000) = NULL, + @suppress_info_messages [bit] = 0, + @event_identifier [nvarchar](4000) = NULL OUTPUT WITH EXECUTE AS CALLER AS EXTERNAL NAME [sql_clr_ics].[StoredProcedures].[clr_send_ics_invite] GO -*/ diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index d84b8b0..f20d8a3 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -8,6 +8,7 @@ public partial class StoredProcedures { + #region Enums and Constants private enum iCalMethods { PUBLISH, @@ -15,7 +16,9 @@ private enum iCalMethods REPLY, CANCEL, ADD, - REFRESH + REFRESH, + COUNTER, + DECLINECOUNTER } private enum iCalClass @@ -26,7 +29,8 @@ private enum iCalClass } private static string[] iCalRoles = { "REQ-PARTICIPANT", "OPT-PARTICIPANT", "NON-PARTICIPANT", "CHAIR" }; - + #endregion Enums and Constants + [SqlProcedure] public static void clr_send_ics_invite( SqlString profile_name @@ -337,7 +341,11 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, blind_copy_recipients_role.Value.ToUpper())); } - if (!organizer_in_recipients) str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); + if (!organizer_in_recipients) + { + msg.Bcc.Add(msg.From); + str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); + } if (use_reminder && method.Value != "CANCEL") { From 0d742539b45115fb84fca5536f143e77a3e1138a Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:16:50 +0300 Subject: [PATCH 05/27] Update README.md --- README.md | 240 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 207 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 2758c85..36b7059 100644 --- a/README.md +++ b/README.md @@ -15,54 +15,228 @@ Alternatively, you can use [this simple installation script](https://github.com/ ``` exec clr_send_ics_invite - [ @from = ] 'sender' - , [ @to = ] 'recipients [ ; ...n ]' - [ , [ @cc = ] 'copy_recipients [ ; ...n ]' ] + [ [ @profile_name = ] 'profile_name' ] + [ , [ @recipients = ] 'recipients [ ; ...n ]' ] + [ , [ @copy_recipients = ] 'copy_recipients [ ; ...n ]' ] + [ , [ @blind_copy_recipients = ] 'blind_copy_recipients [ ; ...n ]' ] + [ , [ @from_address = ] 'from_address' ] [ , [ @reply_to = ] 'reply_to' ] [ , [ @subject = ] 'subject' ] [ , [ @body = ] 'body' ] + [ , [ @body_format = ] 'body_format' ] + [ , [ @importance = ] 'importance' ] + [ , [ @sensitivity = ] 'sensitivity' ] + [ , [ @file_attachments = ] 'file_attachments [ ; ...n ]' ] [ , [ @location = ] 'location' ] [ , [ @start_time_utc = ] 'start_time_utc' ] [ , [ @end_time_utc = ] 'end_time_utc' ] [ , [ @timestamp_utc = ] 'timestamp_utc' ] - [ , [ @smtp_server = ] 'smtp_server' ] - [ , [ @port = ] port ] - [ , [ @use_ssl = ] use_ssl ] - [ , [ @username = ] 'username' ] - [ , [ @password = ] 'password' ] + [ , [ @method = ] 'method' ] + [ , [ @sequence = ] sequence ] + [ , [ @prod_id = ] 'prod_id' ] [ , [ @use_reminder = ] use_reminder ] [ , [ @reminder_minutes = ] reminder_minutes ] [ , [ @require_rsvp = ] require_rsvp ] - [ , [ @cancel_event_identifier = ] 'cancel_event_identifier' ] - [ , [ @event_identifier = ] @event_identifier OUTPUT ] + [ , [ @recipients_role = ] 'recipients_role' ] + [ , [ @copy_recipients_role = ] 'copy_recipients_role' ] + [ , [ @blind_copy_recipients_role = ] 'blind_copy_recipients_role' ] + [ , [ @smtp_servername = ] 'smtp_servername' ] + [ , [ @port = ] port ] + [ , [ @enable_ssl = ] enable_ssl ] + [ , [ @use_default_credentials = ] use_default_credentials ] + [ , [ @username = ] username ] + [ , [ @password = ] password ] [ , [ @suppress_info_messages = ] suppress_info_messages ] + [ , [ @event_identifier = ] event_identifier [ OUTPUT ] ] ``` ## Arguments -|Parameter|Type|Default|Description| -|---|---|---|---| -| `@from` | nvarchar(4000) | _no default_ | Must be a valid single e-mail address from which the invite will be sent. | -| `@to` | nvarchar(4000) | _no default_ | Accepts a list of e-mail addresses (at least one) to be invited as required partisipants, separated by either a comma or a semicolon. | -| `@cc` | nvarchar(4000) | _null_ | Optional parameter. Accepts a list of e-mail addresses (at least one) to be used as CC, separated by either a comma or a semicolon. | -| `@reply_to` | nvarchar(4000) | _null_ | Optional parameter. Accepts an e-mail address to be used as the Reply To address (if different from the `@from` address. | -| `@subject` | nvarchar(4000) | _no default_ | Mandatory parameter. A text string to be used as the meeting / e-mail's subject. | -| `@body` | nvarchar(4000) | _null_ | Optional parameter. A text string to be used as the e-mail's HTML body. | -| `@location` | nvarchar(4000) | _null_ | Optional parameter. Sets the location for the meeting. | -| `@start_time_utc` | datetime | _UTC now + 5 hours_ | Optional parameter. Sets the start time (in UTC) of the meeting. If not specified, by default will be set as **UTC now + 5 hours**. | -| `@end_time_utc` | datetime | _@start_time_utc + 1 hour_ | Optional parameter. Sets the end time (in UTC) of the meeting. If not specified, by default will be set as **`@start_time_utc` + 1 hour**. | -| `@timestamp_utc` | datetime | _UTC now_ | Optional parameter. Sets the DTSTAMP section of the iCal (usually used for consistent updating of meeting invites). If not specified, by default will be set as **UTC now**. | -| `@smtp_server` | nvarchar(4000) | _localhost_ | Optional parameter. Sets the SMTP host name to be used for sending the e-mail. If not specified, by default will be set as **"localhost"**. | -| `@port` | int | _25_ | Optional parameter. Sets the SMTP port to be used for sending the e-mail. If not specified, by default will be set as **25**. | -| `@use_ssl` | bit | _0_ | Optional parameter. Sets whether to use SSL authentication for the SMTP server. If not specified, by default will be set as **0 (false)**. | -| `@username` | nvarchar(4000) | _null (use current Network Credentials)_ | Optional parameter. Sets the username to use when authenticating against the SMTP server. If not specified, by default the **current Network Credentials** will be used (of the SQL Server service). | -| `@password` | nvarchar(4000) | _empty string | Optional parameter. Sets the password to use when authenticating against the SMTP server. Only used when `@username` is also specified. By default, will use an **empty string**. | -| `@use_reminder` | bit | _1_ | Optional parameter. Sets whether to set a reminder for the meeting. By default is set to **1 (true)**. | -| `@reminder_minutes` | int | _15_ | If `@use_reminder` is enabled, this parameter will be used for setting the reminder time in minutes. By default is set to **15**. | -| `@require_rsvp` | bit | _0_ | If set to 0 (false), then participants will not be required to respond with RSVP, and their participation is automatically set as ACCEPTED. If set to 1 (true), then participants will be required to respond with RSVP, and their participation is automatically set as NEEDS-ACTION. By default set to **0 (false)**. | -| `@cancel_event_identifier` | uniqueidentifier | _null_ | You may specify a value for this parameter, if you want to cancel an event that you've already sent. Use the corresponding event's identifier. | -| `@event_identifier` | uniqueidentifier | _null_ | Output parameter. Returns the event's GUID, which can later be used for cancellation. If `@cancel_event_identifier` was specified, the same GUID will be returned. | -| `@suppress_info_messages` | bit | _0_ | If set to 0, an informational message will be printed upon successful delivery of the invitation ( ex. "Mail Sent. Event Identifier: 1234-1234-1234-1234" ). If set to 1, this message will not be printed. By default is set to **0 (false)**. | +## Arguments +`[ @profile_name = ] 'profile_name'` + Is the name of the profile to send the message from. The *profile_name* is of type **sysname**, with a default of NULL. The *profile_name* must be the name of an existing Database Mail profile. When no *profile_name* is specified, **clr_send_ics_invite** checks whether **@from_address** was specified. If not, it uses the default public profile for the **msdb** database. If **@from_address** wasn't specified, and there is no default public profile for the database, **@profile_name** must be specified. + +`[ @recipients = ] 'recipients'` + Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + +`[ @copy_recipients = ] 'copy_recipients'` + Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + +`[ @blind_copy_recipients = ] 'blind_copy_recipients'` + Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + +`[ @from_address = ] 'from_address'` + Is the value of the 'from address' of the email message, and the organizer of the calendar meeting. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is NULL. + +`[ @reply_to = ] 'reply_to'` + Is the value of the 'reply to address' of the email message. It accepts only one email address as a valid value. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is NULL. + +`[ @subject = ] 'subject'` + Is the subject of the e-mail message. The subject is of type **nvarchar(255)**. If no subject is specified, the default is 'SQL Server Meeting'. + +`[ @body = ] 'body'` + Is the body of the e-mail message. The message body is of type **nvarchar(4000)**, with a default of NULL. + +`[ @body_format = ] 'body_format'` + Is the format of the message body. The parameter is of type **varchar(20)**, with a default of NULL. When specified, the headers of the outgoing message are set to indicate that the message body has the specified format. The parameter may contain one of the following values: + +- TEXT + +- HTML + + Defaults to TEXT. + +`[ @importance = ] 'importance'` + Is the importance of the message. The parameter is of type **varchar(6)**. The parameter may contain one of the following values: + +- Low + +- Normal + +- High + + Defaults to Normal. + +`[ @sensitivity = ] 'sensitivity'` + Is the sensitivity classification of the message. The parameter is of type **nvarchar(12)**. The parameter may contain one of the following values: + +- Public + +- Private + +- Confidential + + Defaults to Public. + +`[ @file_attachments = ] 'file_attachments'` + Is a semicolon-delimited list of file names to attach to the e-mail message. Files in the list must be specified as absolute paths. The attachments list is of type **nvarchar(4000)**. By default, Database Mail limits file attachments to 1 MB per file. + +`[ @location = ] 'location'` + Is the location of the calendar meeting. The parameter is of type **nvarchar(4000)**, with a default of NULL. + +`[ @start_time_utc = ] 'start_time_utc'` + Is the start time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@timestamp_utc** + 5 hours. + +`[ @end_time_utc = ] 'end_time_utc'` + Is the end time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@start_time_utc** + 1 hour. + +`[ @timestamp_utc = ] 'timestamp_utc'` + Is the DTSTAMP property of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to current UTC time. + +`[ @method = ] 'method'` + Is the method of the calendar event message. The parameter is of type **nvarchar(14)**. The parameter may contain one of the following values: + +- PUBLISH + +- REQUEST + +- REPLY + +- CANCEL + +- ADD + +- REFRESH + +- COUNTER + +- DECLINECOUNTER + + Defaults to REQUEST. + +`[ @sequence = ] sequence` + Is the sequence of the calendar event message. The parameter is of type **int**, with a default of 0. Unless **@method** is specified as 'CANCEL', in which case the default would be 1. This parameter is important for when updating existing calendar events. + +`[ @prod_id = ] 'prod_id'` + Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(4000)**, with a default of 'Schedule a Meeting'. + +`[ @use_reminder = ] use_reminder` + Determines whether to add a reminder to the event. The parameter is of type **bit**, with a default of 1 (true). + +`[ @reminder_minutes = ] reminder_minutes` + Is the number of minutes to set for the event reminder. The parameter is of type **int**, with a default of 15. + +`[ @require_rsvp = ] require_rsvp` + Determines whether participants are required to respond with an RSVP. The parameter is of type **bit**, with a default of 0 (false). If this parameter equals to 0 (false), then all participants are assumed to have accepted their invitation, without requesting a response. + +`[ @recipients_role = ] 'recipients_role'` + Is the meeting role for the participants specified in the **@recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: + +- REQ-PARTICIPANT + +- OPT-PARTICIPANT + +- NON-PARTICIPANT + +- CHAIR + +Defaults to REQ-PARTICIPANT. + +`[ @copy_recipients_role = ] 'copy_recipients_role'` + Is the meeting role for the participants specified in the **@copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: + +- REQ-PARTICIPANT + +- OPT-PARTICIPANT + +- NON-PARTICIPANT + +- CHAIR + +Defaults to OPT-PARTICIPANT. + +`[ @blind_copy_recipients_role = ] 'blind_copy_recipients_role'` + Is the meeting role for the participants specified in the **@blind_copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: + +- REQ-PARTICIPANT + +- OPT-PARTICIPANT + +- NON-PARTICIPANT + +- CHAIR + +Defaults to NON-PARTICIPANT. + +`[ @smtp_servername = ] 'smtp_servername'` + Is the SMTP server name to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, and no mail profile was used, the default is 'localhost'. + +`[ @port = ] port` + Is the SMTP server port to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **int**. If no parameter is specified, and no mail profile was used, the default is 25. + +`[ @enable_ssl = ] enable_ssl` + Determines whether the SMTP server should use SSL authentication. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **bit**. If no parameter is specified, and no mail profile was used, the default is 0 (false). + +`[ @use_default_credentials = ] use_default_credentials` + Determines whether the SMTP server should use its default network credentials. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **bit**. If no parameter is specified, and no mail profile was used, the default is 0 (false). If **@username** is specified, this parameter is ignored. + +`[ @username = ] username` + Is the userame to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, and no mail profile was used, the default is to use the server's default network credentials instead. + +`[ @password = ] password` + Is the password to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is to use an empty string for the password. + +| **NOTE:** Unfortunately, since MSDB doesn't allow access to the mail profile passwords, it's impossible to utilize an existing mail profile for getting the password for an SMTP server. Therefore, unless you want to use an empty password or default network credentials, *you must specify a value for this parameter*. | +| --- | + +`[ @suppress_info_messages = ] suppress_info_messages` + Determines whether to *NOT* display the success message after sending the e-mail. The parameter is of type **bit**, with a default of 0 (false). + +`[ @event_identifier = ] event_identifier [ OUTPUT ]` + Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(4000)**. + +## Result Sets + On success, returns the message "Mail Sent. Event Identifier: %s" (where %s is replaced with the sent **@event_identifier**), unless **@suppress_info_messages** is specified as 1 (true). + + On Failure, returns an error message specifying the problem. + +## Remarks + +I did my best to align the parameters of this procedure with Microsoft's **sp_send_dbmail** procedure. Unfortunately, since this is a CLR procedure, there are limitations to what can be done. Specifically, it's impossible to define default values for parameters of type **nvarchar(max)** and **varchar(max)**, and so I had to replace those with **nvarchar(4000)**. + +Even though I tried to utilize Microsoft's Database Mail Profile mechanics, I couldn't get access to the account passwords (which is probably a good thing), and so the **@password** parameter becomes mandatory (unless you want to use an empty password or the server's default network credentials). + +I also didn't implement any functionality involving multiple accounts per profile to be used as "failover" accounts. So only the first account per profile is used. ## License and copyright From dbab65ada99b78092a7644bfe63118261c316cc4 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:17:03 +0300 Subject: [PATCH 06/27] updates for v2 --- sql_clr_ics/Script.PostDeployment.sql | 7 ++++--- sql_clr_ics/clr_send_ics_invite.cs | 13 ++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sql_clr_ics/Script.PostDeployment.sql b/sql_clr_ics/Script.PostDeployment.sql index ad47a30..5ad2f71 100644 --- a/sql_clr_ics/Script.PostDeployment.sql +++ b/sql_clr_ics/Script.PostDeployment.sql @@ -11,15 +11,15 @@ GO SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[clr_send_ics_invite] - @profile_name [nvarchar](4000) = NULL, + @profile_name [sysname] = NULL, @recipients [nvarchar](4000) = NULL, @copy_recipients [nvarchar](4000) = NULL, @blind_copy_recipients [nvarchar](4000) = NULL, @from_address [nvarchar](4000) = NULL, @reply_to [nvarchar](4000) = NULL, - @subject [nvarchar](4000) = N'Meeting', + @subject [nvarchar](255) = N'SQL Server Meeting', @body [nvarchar](4000) = NULL, - @body_format [nvarchar](4) = N'TEXT', + @body_format [nvarchar](20) = N'TEXT', @importance [nvarchar](6) = N'Normal', @sensitivity [nvarchar](12) = N'Public', @file_attachments [nvarchar](4000) = NULL, @@ -39,6 +39,7 @@ CREATE PROCEDURE [dbo].[clr_send_ics_invite] @smtp_servername [nvarchar](4000) = N'localhost', @port [int] = 25, @enable_ssl [bit] = 0, + @use_default_credentials [bit] = 0, @username [nvarchar](4000) = NULL, @password [nvarchar](4000) = NULL, @suppress_info_messages [bit] = 0, diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index f20d8a3..51798a7 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -43,14 +43,13 @@ SqlString profile_name , SqlBoolean use_reminder, SqlInt32 reminder_minutes, SqlBoolean require_rsvp , SqlString recipients_role, SqlString copy_recipients_role, SqlString blind_copy_recipients_role , SqlString smtp_servername, SqlInt32 port, SqlBoolean enable_ssl - , SqlString username, SqlString password + , SqlBoolean use_default_credentials, SqlString username, SqlString password , SqlBoolean suppress_info_messages , ref SqlString event_identifier ) { #region local variable declaration - bool use_default_credentials = false; ICredentialsByHost credentials = CredentialCache.DefaultNetworkCredentials; MailPriority mailPriority; @@ -58,7 +57,7 @@ SqlString profile_name #region get missing info from sysmail profile - if (from_address.IsNull || !profile_name.IsNull) + if (from_address.IsNull || (username.IsNull && use_default_credentials.IsNull) || !profile_name.IsNull) { SqlConnection con = new SqlConnection("context connection=true"); // using existing CLR context connection SqlCommand cmd = con.CreateCommand(); @@ -117,8 +116,8 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s if (smtp_servername.IsNull) smtp_servername = rdr.GetSqlString(2); if (port.IsNull) port = rdr.GetSqlInt32(3); if (enable_ssl.IsNull) enable_ssl = rdr.GetSqlBoolean(4); - use_default_credentials = rdr.GetSqlBoolean(5).Value; - if (username.IsNull && !use_default_credentials) username = rdr.GetSqlString(6); + if (use_default_credentials.IsNull) use_default_credentials = rdr.GetSqlBoolean(5).Value; + if (username.IsNull && !use_default_credentials.Value) username = rdr.GetSqlString(6); } rdr.Close(); } @@ -129,7 +128,7 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s #region default values initialization - if (subject.IsNull || string.IsNullOrEmpty(subject.Value)) subject = "Meeting"; + if (subject.IsNull || string.IsNullOrEmpty(subject.Value)) subject = "SQL Server Meeting"; if (body_format.IsNull || string.IsNullOrEmpty(body_format.Value)) body_format = "TEXT"; if (timestamp_utc.IsNull) timestamp_utc = DateTime.UtcNow; if (start_time_utc.IsNull) start_time_utc = timestamp_utc.Value.AddMinutes(+300); @@ -369,7 +368,7 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s { smtpclient.Host = smtp_servername.Value; smtpclient.Port = port.Value; - smtpclient.UseDefaultCredentials = use_default_credentials; + smtpclient.UseDefaultCredentials = use_default_credentials.Value; smtpclient.EnableSsl = enable_ssl.Value; smtpclient.Credentials = credentials; System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar"); From 3536c43f482f1a53707095fd3bf341d24ce440aa Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:19:52 +0300 Subject: [PATCH 07/27] Update README.md --- README.md | 66 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 36b7059..24f42fe 100644 --- a/README.md +++ b/README.md @@ -50,182 +50,194 @@ exec clr_send_ics_invite [ , [ @event_identifier = ] event_identifier [ OUTPUT ] ] ``` -## Arguments - ## Arguments + `[ @profile_name = ] 'profile_name'` + Is the name of the profile to send the message from. The *profile_name* is of type **sysname**, with a default of NULL. The *profile_name* must be the name of an existing Database Mail profile. When no *profile_name* is specified, **clr_send_ics_invite** checks whether **@from_address** was specified. If not, it uses the default public profile for the **msdb** database. If **@from_address** wasn't specified, and there is no default public profile for the database, **@profile_name** must be specified. `[ @recipients = ] 'recipients'` + Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. `[ @copy_recipients = ] 'copy_recipients'` + Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. `[ @blind_copy_recipients = ] 'blind_copy_recipients'` + Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. `[ @from_address = ] 'from_address'` + Is the value of the 'from address' of the email message, and the organizer of the calendar meeting. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is NULL. `[ @reply_to = ] 'reply_to'` + Is the value of the 'reply to address' of the email message. It accepts only one email address as a valid value. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is NULL. `[ @subject = ] 'subject'` + Is the subject of the e-mail message. The subject is of type **nvarchar(255)**. If no subject is specified, the default is 'SQL Server Meeting'. `[ @body = ] 'body'` + Is the body of the e-mail message. The message body is of type **nvarchar(4000)**, with a default of NULL. `[ @body_format = ] 'body_format'` + Is the format of the message body. The parameter is of type **varchar(20)**, with a default of NULL. When specified, the headers of the outgoing message are set to indicate that the message body has the specified format. The parameter may contain one of the following values: -- TEXT - +- TEXT - HTML Defaults to TEXT. `[ @importance = ] 'importance'` + Is the importance of the message. The parameter is of type **varchar(6)**. The parameter may contain one of the following values: -- Low - +- Low - Normal - - High Defaults to Normal. `[ @sensitivity = ] 'sensitivity'` + Is the sensitivity classification of the message. The parameter is of type **nvarchar(12)**. The parameter may contain one of the following values: - Public - -- Private - +- Private - Confidential Defaults to Public. `[ @file_attachments = ] 'file_attachments'` + Is a semicolon-delimited list of file names to attach to the e-mail message. Files in the list must be specified as absolute paths. The attachments list is of type **nvarchar(4000)**. By default, Database Mail limits file attachments to 1 MB per file. `[ @location = ] 'location'` + Is the location of the calendar meeting. The parameter is of type **nvarchar(4000)**, with a default of NULL. `[ @start_time_utc = ] 'start_time_utc'` + Is the start time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@timestamp_utc** + 5 hours. `[ @end_time_utc = ] 'end_time_utc'` + Is the end time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@start_time_utc** + 1 hour. `[ @timestamp_utc = ] 'timestamp_utc'` + Is the DTSTAMP property of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to current UTC time. `[ @method = ] 'method'` + Is the method of the calendar event message. The parameter is of type **nvarchar(14)**. The parameter may contain one of the following values: - PUBLISH - - REQUEST - - REPLY - - CANCEL - - ADD - - REFRESH - - COUNTER - - DECLINECOUNTER Defaults to REQUEST. `[ @sequence = ] sequence` - Is the sequence of the calendar event message. The parameter is of type **int**, with a default of 0. Unless **@method** is specified as 'CANCEL', in which case the default would be 1. This parameter is important for when updating existing calendar events. + + Is the sequence of the calendar event message. The parameter is of type **int**, with a default of 0. Unless **@method** is specified as 'CANCEL', in which case the default would be 1. Proper usage of this parameter is important when updating existing calendar events, since each consecutive update must have a higher sequence number than the one before it. `[ @prod_id = ] 'prod_id'` + Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(4000)**, with a default of 'Schedule a Meeting'. `[ @use_reminder = ] use_reminder` + Determines whether to add a reminder to the event. The parameter is of type **bit**, with a default of 1 (true). `[ @reminder_minutes = ] reminder_minutes` + Is the number of minutes to set for the event reminder. The parameter is of type **int**, with a default of 15. `[ @require_rsvp = ] require_rsvp` + Determines whether participants are required to respond with an RSVP. The parameter is of type **bit**, with a default of 0 (false). If this parameter equals to 0 (false), then all participants are assumed to have accepted their invitation, without requesting a response. `[ @recipients_role = ] 'recipients_role'` + Is the meeting role for the participants specified in the **@recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: - REQ-PARTICIPANT - - OPT-PARTICIPANT - - NON-PARTICIPANT - - CHAIR Defaults to REQ-PARTICIPANT. `[ @copy_recipients_role = ] 'copy_recipients_role'` + Is the meeting role for the participants specified in the **@copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: - REQ-PARTICIPANT - - OPT-PARTICIPANT - - NON-PARTICIPANT - - CHAIR Defaults to OPT-PARTICIPANT. `[ @blind_copy_recipients_role = ] 'blind_copy_recipients_role'` + Is the meeting role for the participants specified in the **@blind_copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: - REQ-PARTICIPANT - - OPT-PARTICIPANT - - NON-PARTICIPANT - - CHAIR Defaults to NON-PARTICIPANT. `[ @smtp_servername = ] 'smtp_servername'` + Is the SMTP server name to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, and no mail profile was used, the default is 'localhost'. `[ @port = ] port` + Is the SMTP server port to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **int**. If no parameter is specified, and no mail profile was used, the default is 25. `[ @enable_ssl = ] enable_ssl` + Determines whether the SMTP server should use SSL authentication. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **bit**. If no parameter is specified, and no mail profile was used, the default is 0 (false). `[ @use_default_credentials = ] use_default_credentials` + Determines whether the SMTP server should use its default network credentials. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **bit**. If no parameter is specified, and no mail profile was used, the default is 0 (false). If **@username** is specified, this parameter is ignored. `[ @username = ] username` + Is the userame to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, and no mail profile was used, the default is to use the server's default network credentials instead. `[ @password = ] password` + Is the password to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is to use an empty string for the password. | **NOTE:** Unfortunately, since MSDB doesn't allow access to the mail profile passwords, it's impossible to utilize an existing mail profile for getting the password for an SMTP server. Therefore, unless you want to use an empty password or default network credentials, *you must specify a value for this parameter*. | | --- | `[ @suppress_info_messages = ] suppress_info_messages` + Determines whether to *NOT* display the success message after sending the e-mail. The parameter is of type **bit**, with a default of 0 (false). `[ @event_identifier = ] event_identifier [ OUTPUT ]` + Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(4000)**. ## Result Sets + On success, returns the message "Mail Sent. Event Identifier: %s" (where %s is replaced with the sent **@event_identifier**), unless **@suppress_info_messages** is specified as 1 (true). On Failure, returns an error message specifying the problem. From 7baf49a067ed8ba516484a957e56f53e060894cd Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:28:48 +0300 Subject: [PATCH 08/27] Update README.md --- README.md | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/README.md b/README.md index 24f42fe..a6842b0 100644 --- a/README.md +++ b/README.md @@ -250,6 +250,89 @@ Even though I tried to utilize Microsoft's Database Mail Profile mechanics, I co I also didn't implement any functionality involving multiple accounts per profile to be used as "failover" accounts. So only the first account per profile is used. +## Examples + +### A. Send a calendar invitation with RSVP requirement + +``` +DECLARE @EventID nvarchar(4000) + +EXEC clr_send_ics_invite + @from_address = N'the_organizer@gmail.com', + @recipients = N'someone@gmail.com,otherguy@outlook.com', + @subject = N'let us meet for pizza!', + @body = N'

Pizza!

Bring your own beer!

', + @body_format = N'HTML', + @location = N'The Pizza place at Hank and Errison corner', + @start_time_utc = '2019-07-02 19:00', + @end_time_utc = '2019-07-02 23:00', + @timestamp_utc = '2019-03-30 18:00', + @smtp_server = 'smtp.gmail.com', + @port = 465, + @enable_ssl = 1, + @username = N'the_organizer@gmail.com', + @password = N'NotActuallyMyPassword', + @use_reminder = 1, + @reminder_minutes = 30, + @require_rsvp = 1, + @event_identifier = @EventID OUTPUT + +SELECT EventID = @EventID +``` + +### B. Cancel the previously sent invitation + +``` +EXEC clr_send_ics_invite + @from_address = N'the_organizer@gmail.com', + @recipients = N'someone@gmail.com,otherguy@outlook.com', + @subject = N'let us meet for pizza!', + @body = N'

Pizza!

Bring your own beer!

', + @body_format = N'HTML', + @location = N'The Pizza place at Hank and Errison corner', + @start_time_utc = '2019-07-02 19:00', + @end_time_utc = '2019-07-02 23:00', + @timestamp_utc = '2019-03-30 18:00', + @smtp_server = 'smtp.gmail.com', + @port = 465, + @enable_ssl = 1, + @username = N'the_organizer@gmail.com', + @password = N'NotActuallyMyPassword', + @require_rsvp = 1, + @cancel_event_identifier = @EventID, + @event_identifier = @EventID OUTPUT + +SELECT EventID = @EventID +``` + +### C. Send an automated calendar invitation without RSVP requirement (i.e. participants are auto-accepted) + +``` +DECLARE @EventID nvarchar(4000) + +EXEC clr_send_ics_invite + @from_address = N'sla_bot@company.com', + @recipients = N'employee1@company.com,employee2@company.com', + @subject = N'Weekly SLA Shift', + @body = N'

You are on-call this week!

This is an automated message

', + @body_format = N'HTML', + @location = N'Our offices', + @start_time_utc = '2019-07-01 00:00', + @end_time_utc = '2019-07-04 23:59', + @timestamp_utc = '2019-05-01 00:00', + @smtp_server = 'smtp.company.com', + @port = 587, + @enable_ssl = 1, + @username = N'sla_bot@company.com', + @password = N'SomethingPassword', + @use_reminder = 1, + @reminder_minutes = 300, + @require_rsvp = 0, + @event_identifier = @EventID OUTPUT + +SELECT EventID = @EventID +``` + ## License and copyright This project is copyrighted by Eitan Blumin, and licensed under the MIT license agreement. @@ -265,3 +348,8 @@ This project was based mostly on the following stack overflow discussion: Also used the iCal specification for further improvements: [https://www.kanzaki.com/docs/ical/](https://www.kanzaki.com/docs/ical/) + +## See Also + [sp_send_dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) + [clr_http_request](https://github.com/EitanBlumin/ClrHttpRequest) + [clr_wmi_request](https://github.com/EitanBlumin/ClrWmiRequest) From 4b724c51d1133e60f2f563e1654a85736ee0a359 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:30:17 +0300 Subject: [PATCH 09/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a6842b0..085114b 100644 --- a/README.md +++ b/README.md @@ -351,5 +351,5 @@ Also used the iCal specification for further improvements: ## See Also [sp_send_dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) - [clr_http_request](https://github.com/EitanBlumin/ClrHttpRequest) + [clr_http_request](https://github.com/EitanBlumin/ClrHttpRequest) [clr_wmi_request](https://github.com/EitanBlumin/ClrWmiRequest) From 32bb3a82807d4e22859b46e7ec5c8bb20fbf924c Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:32:04 +0300 Subject: [PATCH 10/27] updated condensed installation script --- sql_clr_ics/sql_clr_ics_install.sql | 58 ++++++++++++++++++----------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/sql_clr_ics/sql_clr_ics_install.sql b/sql_clr_ics/sql_clr_ics_install.sql index 36281e7..e120f44 100644 --- a/sql_clr_ics/sql_clr_ics_install.sql +++ b/sql_clr_ics/sql_clr_ics_install.sql @@ -54,37 +54,53 @@ PRINT N'Creating Assembly [dbo].[sql_clr_ics]...'; GO CREATE ASSEMBLY [sql_clr_ics] AUTHORIZATION [dbo] - FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103007BBEE25C0000000000000000E00022200B013000002200000008000000000000B241000000200000006000000000001000200000000200000400000000000000060000000000000000A000000002000000000000030060850000100000100000000010000010000000000000100000000000000000000000604100004F000000006000000404000000000000000000000000000000000000008000000C000000284000001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000B8210000002000000022000000020000000000000000000000000000200000602E7273726300000004040000006000000006000000240000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000002A0000000000000000000000000000400000420000000000000000000000000000000094410000000000004800000002000500902800009817000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B300500CE0700000100001100730E00000A0A0F00280F00000A2D0E0F00281000000A281100000A2B0117130811082C0C0672010000706F1200000A260F01280F00000A2D0E0F01281000000A281100000A2B0117130911092C0C0672310000706F1200000A260F04280F00000A2D0E0F04281000000A281100000A2B0117130A110A2C0C06725D0000706F1200000A26066F1300000A16FE02130B110B2C11729300007006281400000A731500000A7A0F07281600000A130C110C2C1E281700000A130D120D230000000000C07240281800000A281900000A10070F08281600000A130E110E2C200F07281A00000A130D120D230000000000004E40281800000A281900000A10080F10281B00000A130F110F2C091F0F281C00000A10100F0F281D00000A131011102C0817281E00000A100F0F14281D00000A131111112C0816281E00000A10140F0A280F00000A2D0E0F0A281000000A281100000A2B0117131211122C0C72F5000070281F00000A100A0F0B281B00000A131311132C091F19281C00000A100B0F0C281D00000A131411142C0816281E00000A100C0F09281600000A131511152C0C282000000A281900000A1009160B282100000A0C0F0D280F00000A2D0E0F0D281000000A281100000A2B0117131611162C0600170B002B40000F0E280F00000A2D0E0F0E281000000A281100000A2B0117131711172C0C7209010070281F00000A100E0F0D281000000A0F0E281000000A732200000A0C000F12282300000A16FE01131811182C150E130F12282400000A282500000A81140000012B110E13282600000A282500000A8114000001732700000A0D090F04281000000A6F2800000A00090F05281000000A6F2900000A0000090F00281000000A732A00000A6F2B00000A0000DE1A131900720B01007011196F2C00000A282D00000A731500000A7A00000F03280F00000A2D110F03281000000A281100000A16FE012B0116131A111A2C1C096F2E00000A0F03281000000A1F3B1F2C6F2F00000A6F3000000A0000DE1A131B00723F010070111B6F2C00000A282D00000A731500000A7A0000096F3100000A0F01281000000A1F3B1F2C6F2F00000A6F3000000A0000DE1A131C007279010070111C6F2C00000A282D00000A731500000A7A00000F02280F00000A2D110F02281000000A281100000A16FE012B0116131D111D2C1C096F3200000A0F02281000000A1F3B1F2C6F2F00000A6F3000000A0000DE1A131E0072A9010070111E6F2C00000A282D00000A731500000A7A730E00000A1304110472D90100706F1200000A26110472F90100706F1200000A26110472330200706F1200000A260F12282300000A131F111F2C1E001104724B0200706F1200000A26110472690200706F1200000A26002B1C001104727F0200706F1200000A261104729B0200706F1200000A2600110472B10200706F1200000A26110472CB0200700F07281A00000A8C19000001283300000A6F1200000A26110472050300700F09281A00000A8C19000001283300000A6F1200000A261104723F0300700F08281A00000A8C19000001283300000A6F1200000A260F06280F00000A16FE01132011202C19110472750300700F06281000000A282D00000A6F1200000A261104728B0300700E13282400000A8C22000001283300000A6F1200000A261104729B030070096F3400000A283300000A6F1200000A26110472BB030070096F3400000A283300000A6F1200000A26110472FD030070096F3500000A283300000A6F1200000A2611047215040070096F3600000A6F3700000A283300000A6F1200000A260F11283800000A2D07723F0400702B057279040070130516130600096F3100000A6F3900000A13212B4D11216F3A00000A13220011226F3700000A096F3600000A6F3700000A283B00000A132311232C03171306110472B904007011226F3C00000A11226F3700000A1105283D00000A6F1200000A260011216F3E00000A2DAADE0D11212C0811216F3F00000A00DC110616FE01132411242C2811047268050070096F3600000A6F3C00000A096F3600000A6F3700000A284000000A6F1200000A260E0F13261126284100000A2D1511260F12282300000A281E00000A284200000A2B021126284300000A132511252C5400110472490600706F1200000A26110472630600700F10284400000A8C27000001283300000A6F1200000A26110472830600706F1200000A26110472A10600706F1200000A26110472CB0600706F1200000A2600110472E10600706F1200000A26110472F70600706F1200000A26734500000A13070011070F0A281000000A6F4600000A0011070F0B284400000A6F4700000A001107076F4800000A0011070F0C283800000A6F4900000A001107086F4A00000A007213070070734B00000A132711276F4C00000A722F070070723D0700706F4D00000A0011276F4C00000A724D07007072570700706F4D00000A000F05281000000A726F070070734B00000A284E00000A1328096F4F00000A11286F5000000A0011046F5100000A1127284E00000A1329096F4F00000A11296F5000000A00096F5200000A7283070070729F0700706F5300000A0000DE1A132A0072E7070070112A6F2C00000A282D00000A731500000A7A00001107096F5400000A000E14285500000A284300000A132B112B2C21285600000A722B0800700E13282400000A8C22000001283300000A6F5700000A0000DE1A132C00726D080070112C6F2C00000A282D00000A731500000A7A2A00000158000000006F021786021A1A0000010000A10241E2021A1A0000010000FD02201D031A1A000001000038034179031A1A000001020043055A9D050D0000000000008106D758071A1A0000010000730740B3071A1A0000012202285800000A002A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000C8040000237E0000340500007007000023537472696E677300000000A40C000098080000235553003C1500001000000023475549440000004C1500004C02000023426C6F620000000000000002000001471502080900000000FA013300160000010000002C000000020000000200000015000000580000000D00000001000000030000000100000003000000000090030100000000000600760207050600E30207050600C101F4040F00380500000600D501F30306005902F30306003A02F3030600CA02F30306009602F3030600AF02F30306000202F30306001D02F30306009F01270506004F06C1030A00EC01A1040A0013035E050A0046015E050A001C005E050A00DF035E050A00B5005E0506006E04F5060E00D90676060E00F50080030E008D06800306004901C10306004704C10306000E004D000E00220680030E006E0136010E000C07800306003D03C1030E00010176060E004F0376060600C000C1030E00190480030600010061030600C804E80506001101C10306001F00C1030E00440796000E002F0480030E00050496000A000107A1040A006601A1040000000025000000000001000100010010007305000039000100010050200000000096008B01740101008428000000008618E2040600160000000100DA03000002005E04000003004A00000004005804000005006E06000006003F0700000700EA0300000800750000000900680000000A00840000000B00BC0400000C00BB0600000D00B90300000E002D0100000F00D800000010007C04000011008F050000120061040000130089040200140090040000150047050900E20401001100E20406001900E2040A002900E20410003100E20410003900E20410004100E20410004900E20410005100E20410005900E20410006100E20410006900E20410007900E2040600A900E20406008100A0035B00810001035F00F90061076300A90052016800A90044036E00F90041067200D100E20410008900A0035B00C9001A077800C90084057D00890081068300890001038A009100A0035B00910081068F009900A0035B00990081069500810081069B00C900220778000101B005A1000901E204A700A100A0035B00A1000103AD00A1008106B3001101BD00BB00B900E2040600B90062061000B90036071000E100E2041000B900D103C100D100E9005F00F9004106C700B900C006CD00F900E100D300190192001000B9005104CD00B9002E00CD00F9004806D900B9002D075F00B90056065F00B900C803DF00E10016065F00990001035B000C00D404EC0014009806FC00F90055070101E1001D015F00F900480607012901EC065B00310183010600F90048060F0199007A0116019900C5001C0199000B031601910001036E00C100E2040600C100D0061000C100B2060100C100CE052501C100AB032501C100A0052A01E900E2041000E9000706300141019200A700F1001D033601B9002E063E011C0092004C0171003B035F00B900FB05520151019200A700C100D30058019900A4065E0159015D0165016101D30010007100E204060020006B0045022E000B00A3012E001300AC012E001B00CB012E002300D4012E002B00E5012E00330015022E003B001B022E004300D4012E004B001B022E0053001B022E005B002D022E0063003A021500E400F5004401048000000100000000000000000000000000E80400000400000000000000000000006B014100000000000400000000000000000000006B013500000000000400000000000000000000006B01C103000000000000000000436F6C6C656374696F6E60310049456E756D657261746F7260310053716C496E743332003C4D6F64756C653E006765745F43430053797374656D2E44617461006D73636F726C69620063630053797374656D2E436F6C6C656374696F6E732E47656E6572696300656E645F74696D655F7574630073746172745F74696D655F7574630074696D657374616D705F757463004164640053797374656D2E436F6C6C656374696F6E732E5370656369616C697A65640053716C47756964004E657747756964006F705F42697477697365416E640053656E640070617373776F7264005265706C616365006765745F4D657373616765004D61696C4D6573736167650043726564656E7469616C43616368650049446973706F7361626C65006765745F446973706C61794E616D6500757365726E616D650053797374656D2E4E65742E4D696D650053716C4461746554696D6500417070656E644C696E65006765745F506970650053716C5069706500436F6E74656E7454797065006F705F46616C736500446973706F736500636C725F73656E645F6963735F696E76697465004E65757472616C5265736F75726365734C616E67756167654174747269627574650044656275676761626C6541747472696275746500417373656D626C795469746C654174747269627574650053716C50726F63656475726541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F56616C7565006F705F547275650053716C537472696E6700437265617465416C7465726E6174655669657746726F6D537472696E6700546F537472696E67006765745F4C656E677468004E6574776F726B43726564656E7469616C0053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C0053797374656D2E4E65742E4D61696C0073716C5F636C725F6963732E646C6C006765745F49734E756C6C007365745F456E61626C6553736C007573655F73736C0053797374656D006765745F46726F6D007365745F46726F6D0066726F6D0053716C426F6F6C65616E006C6F636174696F6E0053797374656D2E5265666C656374696F6E004E616D6556616C7565436F6C6C656374696F6E004D61696C41646472657373436F6C6C656374696F6E00416C7465726E61746556696577436F6C6C656374696F6E00457863657074696F6E006765745F546F007265706C795F746F00726571756972655F7273767000537472696E674275696C646572007573655F72656D696E6465720063616E63656C5F6576656E745F6964656E746966696572004D6963726F736F66742E53716C5365727665722E53657276657200736D74705F7365727665720049456E756D657261746F7200476574456E756D657261746F72002E63746F720073716C5F636C725F6963730053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E436F6D70696C657253657276696365730053797374656D2E5265736F757263657300446562756767696E674D6F6465730073757070726573735F696E666F5F6D657373616765730053797374656D2E446174612E53716C54797065730053746F72656450726F63656475726573004164644D696E757465730072656D696E6465725F6D696E75746573007365745F43726564656E7469616C73006765745F44656661756C744E6574776F726B43726564656E7469616C73007365745F55736544656661756C7443726564656E7469616C730053797374656D2E436F6C6C656374696F6E73006765745F48656164657273006765745F506172616D6574657273006765745F41646472657373004D61696C41646472657373006765745F416C7465726E617465566965777300436F6E63617400466F726D6174004F626A656374006765745F5375626A656374007365745F5375626A656374007375626A6563740053797374656D2E4E6574006F705F496D706C6963697400536D7470436C69656E74006765745F43757272656E74006F705F4C6F676963616C4E6F74007365745F506F727400706F7274006765745F5265706C79546F4C697374007365745F486F7374004943726564656E7469616C734279486F7374004D6F76654E6578740053797374656D2E546578740053716C436F6E7465787400416C7465726E61746556696577006765745F4E6F77006765745F5574634E6F77006765745F426F6479007365745F426F647900626F647900537472696E6744696374696F6E617279006F705F457175616C6974790049734E756C6C4F72456D7074790000002F4D0069007300730069006E006700200070006100720061006D0065007400650072003A002000660072006F006D00002B4D0069007300730069006E006700200070006100720061006D0065007400650072003A00200074006F0000354D0069007300730069006E006700200070006100720061006D0065007400650072003A0020007300750062006A00650063007400006155006E00610062006C006500200074006F002000730065006E00640020006D00610069006C002000640075006500200074006F002000760061006C00690064006100740069006F006E0020006500720072006F0072002800730029003A00200000136C006F00630061006C0068006F007300740000010033460072006F006D0020006100640064007200650073007300200069007300200069006E00760061006C00690064003A00200000395200650070006C00790054006F0020006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002F54006F0020006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002F4300430020006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000001F42004500470049004E003A005600430041004C0045004E004400410052000039500052004F004400490044003A002D002F002F005300630068006500640075006C0065002000610020004D0065006500740069006E0067000117560045005200530049004F004E003A0032002E003000001D4D004500540048004F0044003A0052004500510055004500530054000015530045005100550045004E00430045003A003000001B4D004500540048004F0044003A00430041004E00430045004C000015530045005100550045004E00430045003A003100001942004500470049004E003A0056004500560045004E005400003944005400530054004100520054003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D000039440054005300540041004D0050003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000354400540045004E0044003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000154C004F0043004100540049004F004E003A002000000F5500490044003A007B0030007D00001F4400450053004300520049005000540049004F004E003A007B0030007D00004158002D0041004C0054002D0044004500530043003B0046004D00540054005900500045003D0074006500780074002F00680074006D006C003A007B0030007D000117530055004D004D004100520059003A007B0030007D0000294F005200470041004E0049005A00450052003A004D00410049004C0054004F003A007B0030007D000039500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C0053004500003F500041005200540053005400410054003D004E0045004500440053002D0041004300540049004F004E003B0052005300560050003D0054005200550045000180AD41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D005200450051002D005000410052005400490043004900500041004E0054003B007B0032007D003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D000180DF41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D004E004F004E002D005000410052005400490043004900500041004E0054003B00500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C00530045003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D00011942004500470049004E003A00560041004C00410052004D00001F54005200490047004700450052003A002D00500054007B0030007D004D00011D41004300540049004F004E003A0044004900530050004C004100590000294400450053004300520049005000540049004F004E003A00520065006D0069006E00640065007200001545004E0044003A00560041004C00410052004D00001545004E0044003A0056004500560045004E005400001B45004E0044003A005600430041004C0045004E00440041005200001B74006500780074002F00630061006C0065006E00640061007200000D6D006500740068006F006400000F520045005100550045005300540000096E0061006D00650000174D0065006500740069006E0067002E00690063007300001374006500780074002F00680074006D006C00001B43006F006E00740065006E0074002D0063006C006100730073000147750072006E003A0063006F006E00740065006E0074002D0063006C00610073007300650073003A00630061006C0065006E006400610072006D00650073007300610067006500014353004D0054005000200043006C00690065006E007400200043006F006E00660069006700750072006100740069006F006E0020004500720072006F0072003A00200000414D00610069006C002000530065006E0074002E0020004500760065006E00740020004900640065006E007400690066006900650072003A0020007B0030007D0000294500720072006F0072002000730065006E00640069006E00670020006D00610069006C003A00200000008B63F2930F18DC4F822439AA2ADA67FB00042001010803200001052001011111042001010E45072D1255021259125D12550E02126102020202021165020202020202020202020212690212691269021269020215126D0112711271020202114D1275127912791269021269032000020320000E040001020E05200112550E032000080500020E1C1C040000116505200111650D060001114511650420001165050001114908050001114D0205000111410E050000128085052002010E0E05200011808907000111511180890500001180890520010112710500020E0E0E05200012808D0520020E03030500020E0E1C0420001271071512809101127108200015126D0113000615126D0112710420001300050002020E0E0700040E0E1C1C1C0600030E0E1C1C05000102114D080002114D114D114D04200101020520010112590520001280A107000212790E12750520001280A507151280910112790520010113000520001280A905200101125D060001114D114D0500001280B108B77A5C561934E0892E001501114111411141114111411141114111451145114511411149114D11411141114D1149114D1151101151114D0801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000701000000001001000B73716C5F636C725F69637300002F01002A53656E64204943532063616C656E64617220696E7669746573207573696E672053514C2053657276657200000501000000001101000C456974616E20426C756D696E00000C010007312E302E302E3000000A010005656E2D5553000004010000000000000000007BBEE25C00000000020000001C0100004440000044220000525344536F90C957F826E94D9D051ED792100F7E01000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C6F626A5C44656275675C73716C5F636C725F6963732E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000884100000000000000000000A241000000200000000000000000000000000000000000000000000094410000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF250020001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000A80300000000000000000000A80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00408030000010053007400720069006E006700460069006C00650049006E0066006F000000E402000001003000300030003000300034006200300000006E002B00010043006F006D006D0065006E00740073000000530065006E00640020004900430053002000630061006C0065006E00640061007200200069006E007600690074006500730020007500730069006E0067002000530051004C002000530065007200760065007200000000003A000D00010043006F006D00700061006E0079004E0061006D0065000000000045006900740061006E00200042006C0075006D0069006E000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000730071006C005F0063006C0072005F006900630073000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E003000000040001000010049006E007400650072006E0061006C004E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C0000003E000D0001004C006500670061006C0043006F007000790072006900670068007400000045006900740061006E00200042006C0075006D0069006E000000000042000D0001004C006500670061006C00540072006100640065006D00610072006B0073000000000045006900740061006E00200042006C0075006D0069006E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C00000038000C000100500072006F0064007500630074004E0061006D00650000000000730071006C005F0063006C0072005F006900630073000000340008000100500072006F006400750063007400560065007200730069006F006E00000031002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E0030002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000C000000B43100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01030086AEE65C0000000000000000E00022200B013000003E00000008000000000000725C000000200000006000000000001000200000000200000400000000000000060000000000000000A000000002000000000000030060850000100000100000000010000010000000000000100000000000000000000000205C00004F000000006000000404000000000000000000000000000000000000008000000C000000E85A00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000783C000000200000003E000000020000000000000000000000000000200000602E7273726300000004040000006000000006000000400000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000004600000000000000000000000000004000004200000000000000000000000000000000545C0000000000004800000002000500783200007028000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B300600A71000000100001100280E00000A0A0F04280F00000A2D1E0F1D280F00000A2C090F1C281000000A2D0C0F00280F00000A16FE012B0117130D110D39F5010000007201000070731100000A130E110E6F1200000A130F110E6F1300000A000F00280F00000A131011102C6900110F72310000706F1400000A00110F6F1500000A13110011116F1600000A16FE01131211122C1C0011116F1700000A00110E6F1800000A00728A010070731900000A7A001111166F1A00000A10000011116F1700000A0000DE0D11112C0811116F1B00000A00DC00110F72FA0100706F1400000A00110F6F1C00000A72EB050070178C2B0000016F1D00000A26110F6F1C00000A72F50500700F00281E00000A6F1D00000A26110F6F1500000A13130011136F1600000A16FE01131411142C280011136F1700000A00110E6F1800000A0072070600700F00281E00000A281F00000A731900000A7A000F04280F00000A131511152C0A1113166F1A00000A10040F05280F00000A131611162C0A1113176F1A00000A10050F19280F00000A131711172C0A1113186F1A00000A10190F1A282000000A131811182C0A1113196F2100000A101A0F1B281000000A131911192C0A11131A6F2200000A101B0F1C281000000A131A111A2C1811131B6F2200000A131B121B282300000A282400000A101C0F1D280F00000A2C0C0F1C282300000A16FE012B0116131C111C2C0A11131C6F1A00000A101D0011136F1700000A0000DE0D11132C0811136F1B00000A00DC110E6F1800000A00000F06280F00000A2D0E0F06281E00000A282500000A2B0117131D111D2C0C7241060070282600000A10060F08280F00000A2D0E0F08281E00000A282500000A2B0117131E111E2C0C7267060070282600000A10080F0F282700000A131F111F2C0C282800000A282900000A100F0F0D282700000A132011202C200F0F282A00000A13211221230000000000C07240282B00000A282900000A100D0F0E282700000A132211222C200F0D282A00000A13211221230000000000004E40282B00000A282900000A100E0F14282000000A132311232C091F0F282C00000A10140F13281000000A132411242C0817282400000A10130F1F281000000A132511252C0816282400000A101F0F12280F00000A2D0E0F12281E00000A282500000A2B0117132611262C0C7271060070282600000A10120F09280F00000A2D0E0F09281E00000A282500000A2B0117132711272C0C7297060070282600000A10090F0A280F00000A2D0E0F0A281E00000A282500000A2B0117132811282C0C72A5060070282600000A100A0F19280F00000A2D0E0F19281E00000A282500000A2B0117132911292C0C72B3060070282600000A10190F1A282000000A132A112A2C091F19282C00000A101A0F1B281000000A132B112B2C0816282400000A101B0F1D280F00000A2D0E0F1D281E00000A282500000A2B0117132C112C2C0C0017282400000A101C002B40000F1E280F00000A2D0E0F1E281E00000A282500000A2B0117132D112D2C0C72C7060070282600000A101E0F1D281E00000A0F1E281E00000A732D00000A0A000F16280F00000A132E112E2C0C72C9060070282600000A10160F17280F00000A132F112F2C0C72E9060070282600000A10170F18280F00000A133011302C0C7209070070282600000A10180F10280F00000A133111312C0C7229070070282600000A10100F11282000000A133211322C1E0F10281E00000A7239070070282E00000A2D03162B0117282C00000A10110E20280F00000A133311332C200E20282F00000A13341234FE161D0000016F3000000A282600000A8110000001733100000A0C0F04280F00000A2D0E0F04281E00000A282500000A2B0117133511352C0C0872470700706F3200000A260F01280F00000A2D0E0F01281E00000A282500000A2C310F02280F00000A2D0E0F02281E00000A282500000A2C1A0F03280F00000A2D0E0F03281E00000A282500000A2B01172B0116133611362C0C0872A10700706F3200000A260F08281E00000A7266080070283300000A2C130F08281E00000A7267060070283300000A2B0116133711372C180872700800700F08281E00000A281F00000A6F3200000A260F10281E00000A171203280100002B16FE01133811382C310872DC0800700F10281E00000AD003000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F0A281E00000A171204280200002B16FE01133911392C310872300900700F0A281E00000AD004000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F09281E00000A171201280300002B16FE01133A113A2C3108728C0900700F09281E00000AD015000001283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A26161305161306161307007E01000004133B16133C388F000000113B113C9A133D000F01280F00000A2D10113D0F16281E00000A282E00000A2B0116133E113E2C0500171305000F02280F00000A2D10113D0F17281E00000A282E00000A2B0116133F113F2C0500171306000F03280F00000A2D10113D0F18281E00000A282E00000A2B0116134011402C050017130700110511065F11075F134111412C03002B1200113C1758133C113C113B8E693F66FFFFFF0F01280F00000A2D07110516FE012B0116134211422C220872E80900700F16281E00000A7E010000046F3000000A283800000A6F3200000A260F02280F00000A2D07110616FE012B0116134311432C2208724E0A00700F17281E00000A7E010000046F3000000A283800000A6F3200000A260F03280F00000A2D07110716FE012B0116134411442C220872BE0A00700F18281E00000A7E010000046F3000000A283800000A6F3200000A26086F3900000A16FE02134511452C11723A0B007008283A00000A731900000A7A733B00000A130811080F06281E00000A6F3C00000A0011080F07281E00000A6F3D00000A001108076F3E00000A001108176F3F00000A000F0B280F00000A16FE01134611462C6C00000F0B281E00000A178D3000000125161F3B9D6F4000000A13471613482B43114711489A1349000011086F4100000A1149734200000A6F4300000A0000DE1C134A00729C0B00701149114A6F4400000A283800000A731900000A7A00114817581348114811478E6932B500000011080F04281E00000A734500000A6F4600000A0000DE1A134B0072D40B0070114B6F4400000A284700000A731900000A7A00000F05280F00000A2D110F05281E00000A282500000A16FE012B0116134C114C2C1D11086F4800000A0F05281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134D00720A0C0070114D6F4400000A284700000A731900000A7A000011086F4B00000A0F01281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134E0072380C0070114E6F4400000A284700000A731900000A7A00000F02280F00000A2D110F02281E00000A282500000A16FE012B0116134F114F2C1D11086F4C00000A0F02281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A135000726A0C007011506F4400000A284700000A731900000A7A00000F03280F00000A2D110F03281E00000A282500000A16FE012B0116135111512C1D11086F4D00000A0F03281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A13520072A60C007011526F4400000A284700000A731900000A7A733100000A1309110972EE0C00706F3200000A261109720E0D00700F12281E00000A281F00000A6F3200000A261109722A0D00706F3200000A26110972420D00700F10281E00000A6F3700000A281F00000A6F3200000A26110972580D00700F11284E00000A8C2B000001281F00000A6F3200000A26110972720D00706F3200000A261109728C0D00700F0D282A00000A8C1C000001281F00000A6F3200000A26110972C60D00700F0F282A00000A8C1C000001281F00000A6F3200000A26110972000E00700F0E282A00000A8C1C000001281F00000A6F3200000A260F0C280F00000A16FE01135311532C19110972360E00700F0C281E00000A284700000A6F3200000A261109724C0E00700E20281E00000A281F00000A6F3200000A261109725C0E007011086F4F00000A281F00000A6F3200000A261109727C0E007011086F4F00000A281F00000A6F3200000A26110972BE0E007011086F5000000A281F00000A6F3200000A26110972D60E007011086F5100000A6F5200000A281F00000A6F3200000A26110972000F00700F0A281E00000A6F3700000A281F00000A6F3200000A26071354115445030000000200000011000000200000002B2D110972140F00706F3200000A262B201109722A0F00706F3200000A262B11110972400F00706F3200000A262B022B000F15282300000A2D0772560F00702B0572900F0070130A16130B0011086F4B00000A6F5300000A13552B6C11556F5400000A13560011566F5200000A11086F5100000A6F5200000A282E00000A135711572C0317130B110972D00F00701A8D0E000001251611566F5500000AA2251711566F5200000AA22518110AA225190F16281E00000A6F3700000AA2285600000A6F3200000A260011556F5700000A2D8BDE0D11552C0811556F1B00000A00DC0011086F4C00000A6F5300000A13582B6C11586F5400000A13590011596F5200000A11086F5100000A6F5200000A282E00000A135A115A2C0317130B110972D00F00701A8D0E000001251611596F5500000AA2251711596F5200000AA22518110AA225190F17281E00000A6F3700000AA2285600000A6F3200000A260011586F5700000A2D8BDE0D11582C0811586F1B00000A00DC0011086F4D00000A6F5300000A135B2B6C115B6F5400000A135C00115C6F5200000A11086F5100000A6F5200000A282E00000A135D115D2C0317130B110972D00F00701A8D0E0000012516115C6F5500000AA22517115C6F5200000AA22518110AA225190F18281E00000A6F3700000AA2285600000A6F3200000A2600115B6F5700000A2D8BDE0D115B2C08115B6F1B00000A00DC110B16FE01135E115E2C400011086F4D00000A11086F5100000A6F5800000A001109726710007011086F5100000A6F5500000A11086F5100000A6F5200000A283800000A6F3200000A26000E13131B111B285900000A2D1F111B0F10281E00000A7239070070283300000A282400000A285A00000A2B02111B285B00000A135F115F2C5400110972481100706F3200000A26110972621100700F14284E00000A8C2B000001281F00000A6F3200000A26110972821100706F3200000A26110972A01100706F3200000A26110972CA1100706F3200000A2600110972E01100706F3200000A26110972F61100706F3200000A26735C00000A130C00110C0F19281E00000A6F5D00000A00110C0F1A284E00000A6F5E00000A00110C0F1C282300000A6F5F00000A00110C0F1B282300000A6F6000000A00110C066F6100000A007212120070736200000A136011606F6300000A722E1200700F10281E00000A6F3700000A6F6400000A0011606F6300000A723C12007072461200706F6400000A000F07281E00000A725E120070736200000A286500000A136111086F6600000A11616F6700000A0011096F3000000A1160286500000A136211086F6600000A11626F6700000A0011086F6800000A7272120070728E1200706F6900000A0000DE1A13630072D612007011636F4400000A284700000A731900000A7A0000110C11086F6A00000A000E1F286B00000A285B00000A136411642C1C286C00000A721A1300700E20281E00000A281F00000A6F6D00000A0000DE1A136500725C13007011656F4400000A284700000A731900000A7A2A00413C0100020000007A00000044000000BE0000000D00000000000000020000001301000004010000170200000D0000000000000000000000C508000018000000DD0800001C0000001E000001000000000A09000018000000220900001A0000001E000001000000003D090000420000007F0900001A0000001E000001000000009A09000021000000BB0900001A0000001E00000100000000D609000042000000180A00001A0000001E00000100000000330A000042000000750A00001A0000001E00000102000000A50C0000790000001E0D00000D00000000000000020000003A0D000079000000B30D00000D0000000000000002000000CF0D000079000000480E00000D00000000000000000000004E0F0000E7000000351000001A0000001E00000100000000501000003C0000008C1000001A0000001E0000012202286E00000A002AB21A8D2D000001251672C9060070A2251772E9060070A225187209070070A225197286130070A280010000042A000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000CC060000237E000038070000380A000023537472696E67730000000070110000941300002355530004250000100000002347554944000000142500005C03000023426C6F620000000000000002000001571D0208090A000000FA013300160000010000003A000000040000000E00000003000000210000006E0000000B0000000D0000000100000004000000010000000300000002000000030000000000AD0401000000000006008303DB060600F003DB060600CE02BC060F000C0700000600E2022A05060066032A05060047032A050600D7032A050600A3032A050600BC032A0506000F032A0506002A032A050600AC02FB060600B408F0040A00F9026E060A00300445070A00440245070A001F0045070A00110545070E006509DB080E00100A9D0406002D0681090E0097019D040E000E099D040A00B705F8080A004F01F8080A001106F80806004702F00406002401F0040600C505F00406000E00B1000E002B089D040E006C0234020E00A8099D0406000905F0040E00A301DB080E006C04DB080A00AA05CF050A003701CF050A000406CF050600B301F0040A005005F80806002200F0040A006106F80806005A04F00406007302F0040600BF01F0040600FF05F0040E007D059D040E0019099D04060001007E040E0067059D0406008906E7070E00D809FA000E0092059D040E003C05FA000A009D096E060A0064026E060000000028000000000001000100010010005A07000039000100010003010000CF0600008D000200040003010000150800008D000B000400110032075F0206068C00630256805300660256807E00660256808600660256806800660256803F00660256804B00660256807600660256806F00660206068C006302568038006A02568043006A0256805B006A02502000000000960098026E0201004032000000008618A306060022004932000000009118A906B5022200000001000E02000002004F08000003004A0800000400440800000500370800000600E90500000700D30800000800D30900000900A80800000A00770100000B001D0A00000C006A0800000D00210500000E00D90000000F00CC0000001000E800000011005F01000012008201000013001901000014003B0600001500760700001600F20500001700EE0100001800E90100001900E30100001A00240200001B00470900001C00E50400001D00CF0700001E001B0200001F006601000020001B070000210048060900A30601001100A30606001900A3060A002900A30610003100A30610003900A30610004100A30610004900A30610005100A30610005900A30610006100A30610006900A30610007900A306060021019707B7008100BD04BD009900BD04BD00C900A3061000C9004101C10031011C05060039018D091000D1001F06C60041018E08BD00410181020600310181020600F100A3061000D9002D04CB00490187020600D1000608D10051011804D70081000E04DF006901A108E3009100BD04BD00D9001C00E900D9000E05EF0099000E04BD009900E608F5006901290AFB008100E60800018900BD04BD00E100B60906018900E6080B0189000E041201E1006B0717019100E6081D012901A30623016901E9092901E90021012F0171005804DF00B100A3060600B100500234016901F509290119018F023A017101D101490119013C07520169015906DF006901A1085A01B10061046B0169019A086F01B900A3060600B900C7081000B900CA091000B900030A7501B900C8047B016901F2088001B9005A0887019101A30610000C00F6009601F1008B01DF000101A3061000B90000059C0169019A08A301B9004C09A90169016F01AF01A101F6001000B900E205A901B9003100A901B900A900A90191000E046B01B900C109DF00B900BB08DF00B900F704B50101011F08DF0014009506C4011C002409D5010101FE01DF006901A108DA01A9017809BD001400F600960199007802E10199002901E70199002504E101C100A3060600C1005C091000C1003E090100C100B5077B01C100D7047B01C1008707F0010901A306100009010608F601B101F600230111013A04FC01B9007B0806022400F6009601B900FA071502C101F6002301C1005A011B02990030092102C9015B022802D1015A0110007100A306060008000C003702080010003C0208001400410208001800460208001C004B02080020005002080024005502080028005A02080030003702080034003C0208003800410220006B003C022E000B00B9022E001300C2022E001B00E1022E002300EA022E002B00FB022E0033002B032E003B0031032E004300EA022E004B0031032E00530031032E005B0043032E006300500315008D01BB01CD010C02048000000100000000000000000000000000B00600000400000000000000000000002E02A000000000000400000000000000000000002E029400000000000400000000000000000000002E02F004000000000300020004000200690044016900610169006601000000436F6C6C656374696F6E60310049456E756D657261746F7260310047657453716C496E743332003C4D6F64756C653E006765745F4343005055424C49430041444400505249564154450052454652455348005055424C49534800434F4E464944454E5449414C0043414E43454C004445434C494E45434F554E5445520052455155455354005245504C590076616C75655F5F0053797374656D2E44617461006D73636F726C6962006765745F4263630053797374656D2E436F6C6C656374696F6E732E47656E6572696300656E645F74696D655F7574630073746172745F74696D655F7574630074696D657374616D705F757463004164640053797374656D2E436F6C6C656374696F6E732E5370656369616C697A65640070726F645F6964004E657747756964006F705F42697477697365416E64004462436F6D6D616E6400437265617465436F6D6D616E640053716C436F6D6D616E640053656E64006D6574686F640070617373776F7264005265706C61636500696D706F7274616E63650073657175656E6365006765745F4D657373616765004D61696C4D6573736167650043726564656E7469616C43616368650049446973706F7361626C650052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500626C696E645F636F70795F726563697069656E74735F726F6C65006765745F446973706C61794E616D650070726F66696C655F6E616D6500757365726E616D6500736D74705F7365727665726E616D650053797374656D2E4E65742E4D696D650053716C4461746554696D6500417070656E644C696E65006765745F506970650053716C5069706500436F6E74656E7454797065006F705F46616C736500436C6F736500446973706F736500547279506172736500636C725F73656E645F6963735F696E76697465004E65757472616C5265736F75726365734C616E67756167654174747269627574650044656275676761626C6541747472696275746500417373656D626C795469746C654174747269627574650053716C50726F63656475726541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F56616C7565004164645769746856616C7565006F705F547275650047657453716C537472696E6700437265617465416C7465726E6174655669657746726F6D537472696E6700546F537472696E67006765745F4C656E677468004E6574776F726B43726564656E7469616C0053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C0053797374656D2E4E65742E4D61696C0073716C5F636C725F6963732E646C6C006765745F49734E756C6C007365745F4973426F647948746D6C007365745F456E61626C6553736C00656E61626C655F73736C0053797374656D006765745F46726F6D007365745F46726F6D00456E756D0047657453716C426F6F6C65616E004F70656E006C6F636174696F6E0053797374656D2E5265666C656374696F6E004E616D6556616C7565436F6C6C656374696F6E0053716C506172616D65746572436F6C6C656374696F6E004D61696C41646472657373436F6C6C656374696F6E004174746163686D656E74436F6C6C656374696F6E00416C7465726E61746556696577436F6C6C656374696F6E004462436F6E6E656374696F6E0053716C436F6E6E656374696F6E00457863657074696F6E0053797374656D2E446174612E436F6D6D6F6E006765745F546F007265706C795F746F00726571756972655F727376700043686172004462446174615265616465720053716C44617461526561646572004578656375746552656164657200537472696E674275696C646572007573655F72656D696E646572006576656E745F6964656E74696669657200546F55707065720053716C506172616D65746572004D6963726F736F66742E53716C5365727665722E5365727665720049456E756D657261746F7200476574456E756D657261746F72002E63746F72002E6363746F720073716C5F636C725F6963730053797374656D2E446961676E6F7374696373006943616C4D6574686F64730053797374656D2E52756E74696D652E436F6D70696C657253657276696365730053797374656D2E5265736F757263657300446562756767696E674D6F6465730073757070726573735F696E666F5F6D65737361676573006943616C526F6C6573004765744E616D65730053797374656D2E446174612E53716C54797065730053746F72656450726F63656475726573004164644D696E757465730072656D696E6465725F6D696E75746573007365745F43726564656E7469616C73006765745F44656661756C744E6574776F726B43726564656E7469616C73007365745F55736544656661756C7443726564656E7469616C73007573655F64656661756C745F63726564656E7469616C730053797374656D2E436F6C6C656374696F6E73006765745F48656164657273006765745F506172616D6574657273006943616C436C617373006765745F41646472657373004D61696C416464726573730066726F6D5F6164647265737300626C696E645F636F70795F726563697069656E7473006765745F4174746163686D656E74730066696C655F6174746163686D656E7473006765745F416C7465726E6174655669657773006765745F486173526F777300436F6E63617400466F726D617400626F64795F666F726D6174004F626A656374006765745F5375626A656374007365745F5375626A656374007375626A6563740053797374656D2E4E6574006F705F496D706C696369740053706C69740053797374656D2E446174612E53716C436C69656E7400536D7470436C69656E74004174746163686D656E74006765745F43757272656E74006F705F4C6F676963616C4E6F74007365745F506F727400706F7274006765745F5265706C79546F4C697374007365745F486F7374004943726564656E7469616C734279486F7374004D6F76654E6578740053797374656D2E54657874007365745F436F6D6D616E64546578740053716C436F6E7465787400416C7465726E61746556696577006765745F5574634E6F77006765745F426F6479007365745F426F647900626F647900537472696E6744696374696F6E617279006F705F457175616C697479006F705F496E657175616C697479007365745F5072696F72697479004D61696C5072696F726974790073656E73697469766974790049734E756C6C4F72456D7074790000002F63006F006E007400650078007400200063006F006E006E0065006300740069006F006E003D007400720075006500008157530045004C00450043005400200070002E006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007000720069006E0063006900700061006C00700072006F00660069006C0065005D002000410053002000700070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A004F004E002000700070002E00700072006F00660069006C0065005F006900640020003D00200070002E00700072006F00660069006C0065005F00690064000D000A00570048004500520045002000700070002E00690073005F00640065006600610075006C00740020003D0020003100006F700072006F00660069006C0065005F006E0061006D00650020006E006F0074002000730070006500630069006600690065006400200061006E00640020006E006F002000640065006600610075006C0074002000700072006F00660069006C006500200066006F0075006E0064000083EF530045004C00450043005400200054004F00500020003100200061002E0065006D00610069006C005F0061006400640072006500730073002C00200061002E007200650070006C00790074006F005F0061006400640072006500730073002C00200073002E007300650072007600650072006E0061006D0065002C00200073002E0070006F00720074002C00200073002E0065006E00610062006C0065005F00730073006C002C00200073002E007500730065005F00640065006600610075006C0074005F00630072006500640065006E007400690061006C0073002C00200073002E0075007300650072006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065006100630063006F0075006E0074005D002000410053002000700061000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D002000700061002E00700072006F00660069006C0065005F00690064000D000A0041004E0044002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020003E003D00200040005300650071000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F006100630063006F0075006E0074005D00200041005300200061000D000A004F004E002000700061002E006100630063006F0075006E0074005F006900640020003D00200061002E006100630063006F0075006E0074005F00690064000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007300650072007600650072005D00200041005300200073000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D00200073002E006100630063006F0075006E0074005F00690064000D000A0057004800450052004500200070002E006E0061006D00650020003D0020004000500072006F00660069006C0065000D000A004F0052004400450052002000420059002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020004100530043000009400053006500710000114000500072006F00660069006C0065000039700072006F00660069006C0065005F006E0061006D006500200027007B0030007D00270020006E006F007400200066006F0075006E0064000125530051004C00200053006500720076006500720020004D0065006500740069006E0067000009540045005800540000255300630068006500640075006C0065002000610020004D0065006500740069006E006700000D4E006F0072006D0061006C00000D5000750062006C006900630000136C006F00630061006C0068006F00730074000001001F5200450051002D005000410052005400490043004900500041004E005400011F4F00500054002D005000410052005400490043004900500041004E005400011F4E004F004E002D005000410052005400490043004900500041004E005400010F5200450051005500450053005400000D430041004E00430045004C0000594D0069007300730069006E0067002000730065006E006400650072003A00200050006C0065006100730065002000730070006500630069006600790020004000660072006F006D005F0061006400640072006500730073000080C34D0069007300730069006E006700200072006500630069007000690065006E00740073003A00200050006C0065006100730065002000730070006500630069006600790020006500690074006800650072002000400072006500630069007000690065006E00740073002C002000400063006F00700079005F0072006500630069007000690065006E007400730020006F0072002000400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073000009480054004D004C00006B400062006F00640079005F0066006F0072006D006100740020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A00200054004500580054002C002000480054004D004C00005340006D006500740068006F00640020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B730065006E007300690074006900760069007400790020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B400069006D0070006F007200740061006E006300650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D000065400072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006F400063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00007B400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006155006E00610062006C006500200074006F002000730065006E00640020006D00610069006C002000640075006500200074006F002000760061006C00690064006100740069006F006E0020006500720072006F0072002800730029003A002000003755006E00610062006C006500200074006F002000610074007400610063006800200027007B0030007D0027003A0020007B0031007D0001354000660072006F006D005F006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002D40007200650070006C0079005F0074006F00200069007300200069006E00760061006C00690064003A0020000031400072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000003B400063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A0020000047400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000001F42004500470049004E003A005600430041004C0045004E00440041005200001B500052004F004400490044003A002D002F002F007B0030007D000117560045005200530049004F004E003A0032002E00300000154D004500540048004F0044003A007B0030007D000019530045005100550045004E00430045003A007B0030007D00001942004500470049004E003A0056004500560045004E005400003944005400530054004100520054003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D000039440054005300540041004D0050003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000354400540045004E0044003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000154C004F0043004100540049004F004E003A002000000F5500490044003A007B0030007D00001F4400450053004300520049005000540049004F004E003A007B0030007D00004158002D0041004C0054002D0044004500530043003B0046004D00540054005900500045003D0074006500780074002F00680074006D006C003A007B0030007D000117530055004D004D004100520059003A007B0030007D0000294F005200470041004E0049005A00450052003A004D00410049004C0054004F003A007B0030007D00001343004C004100530053003A007B0030007D0000155000520049004F0052004900540059003A00350000155000520049004F0052004900540059003A00390000155000520049004F0052004900540059003A0031000039500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C0053004500003F500041005200540053005400410054003D004E0045004500440053002D0041004300540049004F004E003B0052005300560050003D00540052005500450001809541005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D007B0033007D003B007B0032007D003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D000180DF41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D004E004F004E002D005000410052005400490043004900500041004E0054003B00500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C00530045003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D00011942004500470049004E003A00560041004C00410052004D00001F54005200490047004700450052003A002D00500054007B0030007D004D00011D41004300540049004F004E003A0044004900530050004C004100590000294400450053004300520049005000540049004F004E003A00520065006D0069006E00640065007200001545004E0044003A00560041004C00410052004D00001545004E0044003A0056004500560045004E005400001B45004E0044003A005600430041004C0045004E00440041005200001B74006500780074002F00630061006C0065006E00640061007200000D6D006500740068006F00640000096E0061006D00650000174D0065006500740069006E0067002E00690063007300001374006500780074002F00680074006D006C00001B43006F006E00740065006E0074002D0063006C006100730073000147750072006E003A0063006F006E00740065006E0074002D0063006C00610073007300650073003A00630061006C0065006E006400610072006D00650073007300610067006500014353004D0054005000200043006C00690065006E007400200043006F006E00660069006700750072006100740069006F006E0020004500720072006F0072003A00200000414D00610069006C002000530065006E0074002E0020004500760065006E00740020004900640065006E007400690066006900650072003A0020007B0030007D0000294500720072006F0072002000730065006E00640069006E00670020006D00610069006C003A002000000B4300480041004900520000000072171058F16DF140AEC155837BD52AFA00042001010803200001052001011111042001010E80A00766125111551259110C1110020202125D12590E021261021265126902126D02126D02020202020202114D0202020202117102020202020202020202020202020202020211750202020202021D0E080E0202020202020202021D0E080E12791279021279127902127902127902115515127D011280811280810215127D011280811280810215127D011280811280810202021280851280891280891279021279050000128095032000020420001269042000126D0520011141080520001280A90720021280B10E1C0320000E0500020E0E1C052001114908052001114D08050001114D02040001020E05000111410E040000117106000111451171042000117105200111710D050001114908052002010E0E050002020E0E040000117505200112590E09100103020E02101E00040A01110C0800011280B91180BD0700011D0E1280B90600030E0E1C1C040A011110040A011155032000080500020E1C1C05200101115504200101020620011D0E1D030520001280C508151280CD011280C9052001011300062001011280810500020E0E0E0520001280D10520020E030305200012808108151280CD0112808108200015127D0113000715127D0112808104200013000600020E0E1D1C05000102114D080002114D114D114D0520010112510520001280D90900021280890E1280850520001280DD08151280CD011280890520001280E105200101125D060001114D114D0500001280E908B77A5C561934E0890400000000040100000004020000000403000000040400000004050000000406000000040700000003061D0E0206080306110C03061110460021011141114111411141114111411141114111411141114111411141114511451145114111491141114D1149114D11411141114111411149114D114D11411141114D101141030000010801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000701000000001001000B73716C5F636C725F69637300002F01002A53656E64204943532063616C656E64617220696E7669746573207573696E672053514C2053657276657200000501000000001101000C456974616E20426C756D696E00000C010007312E302E302E3000000A010005656E2D55530000000000000085AEE65C00000000020000001C010000045B0000043D000052534453FE40FD10CEC2EC4288BE81BCCB03616601000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C6F626A5C44656275675C73716C5F636C725F6963732E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000485C00000000000000000000625C0000002000000000000000000000000000000000000000000000545C0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000A80300000000000000000000A80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00408030000010053007400720069006E006700460069006C00650049006E0066006F000000E402000001003000300030003000300034006200300000006E002B00010043006F006D006D0065006E00740073000000530065006E00640020004900430053002000630061006C0065006E00640061007200200069006E007600690074006500730020007500730069006E0067002000530051004C002000530065007200760065007200000000003A000D00010043006F006D00700061006E0079004E0061006D0065000000000045006900740061006E00200042006C0075006D0069006E000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000730071006C005F0063006C0072005F006900630073000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E003000000040001000010049006E007400650072006E0061006C004E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C0000003E000D0001004C006500670061006C0043006F007000790072006900670068007400000045006900740061006E00200042006C0075006D0069006E000000000042000D0001004C006500670061006C00540072006100640065006D00610072006B0073000000000045006900740061006E00200042006C0075006D0069006E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C00000038000C000100500072006F0064007500630074004E0061006D00650000000000730071006C005F0063006C0072005F006900630073000000340008000100500072006F006400750063007400560065007200730069006F006E00000031002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E0030002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000C000000743C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE; GO ALTER ASSEMBLY [sql_clr_ics] DROP FILE ALL - ADD FILE FROM 0x4D6963726F736F667420432F432B2B204D534620372E30300D0A1A445300000000020000020000001B0000008C000000000000001A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF380000F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA3101380000000010000000100000000000000E00FFFF04000000FFFF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA3101380000000010000000100000000000000F00FFFF04000000FFFF0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E31017BBEE25C010000006F90C957F826E94D9D051ED792100F7E00000000000000000100000001000000000000000000000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F862513FC607D311905300C04FA302A1C4454B99E9E6D211903F00C04FA302A10B9D865A1166D311BD2A0000F80849BDEC1618FF5EAA104D87F76F496383346014000000000000001AB91FB23E0162314ECD74DC1F3BEEE69189979C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CE07000000000000CE070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEEFFEEF010000009600000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730000633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730004000000010000004B0000004C000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001BE2300180000000EADC753B1B0FD50101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000100000001000000000000004C000000280000001BE23001349634835C000000010000004B0000004C000000650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003E002A11000000006804000000000000CE070000000000000000000001000006000000000100000000636C725F73656E645F6963735F696E76697465000000001600031104000000A8030000CE07000000000000010000000A0024115553797374656D00120024115553797374656D2E54657874000000000E0024115553797374656D2E4E657400160024115553797374656D2E4E65742E4D61696C000000001A0024115553797374656D2E446174612E53716C54797065730000001E0020110000000001000011000000000000000073625F4572726F72730000002A0020110100000001000011000000000000000075736544656661756C7443726564656E7469616C730000001E0020110200000001000011000000000000000063726564656E7469616C730016002011030000000100001100000000000000006D7367001600201104000000010000110000000000000000737472001E00201105000000010000110000000000000000727376705F737472696E67002A002011060000000100001100000000000000006F7267616E697A65725F696E5F726563697069656E7473001E00201107000000010000110000000000000000736D7470636C69656E7400001600031144000000F80100001A00000086020000010000001600201119000000010000110000000000000000650000000200060016000311440000002C0200001A000000E202000001000000160020111B00000001000011000000000000000065000000020006001600031144000000600200001A0000001D03000001000000160020111C00000001000011000000000000000065000000020006001600031144000000940200001A0000007903000001000000160020111E00000001000011000000000000000065000000020006001600031144000000CC0200004D00000045050000010000001A0020112200000001000011000000000000000061646472000000000200060016000311440000003C030000D500000081060000010000001A00201127000000010000110000000000000000636F6E74797065001A0020112800000001000011000000000000000048544D4C000000001A00201129000000010000110000000000000000617643616C000000020006001600031144000000700300001A0000005807000001000000160020112A00000001000011000000000000000065000000020006001600031144000000A40300001A000000B307000001000000160020112C000000010000110000000000000000650000000200060002000600BA000404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004020000040000000C00000001000500040600038C00000001390184F60185310187FE018CC10191A10192180196B602650280D402813D0281B7028284000282D802832F02836C0283A30283F102845802847D0284AB0285800286240286D80188C602895C0189EC018AC7028B5B018BD0028D74028FCE069244019244029281029392029477000198320199010199B5019AA1029B9C019C6000000002000600F2000000640800000000000001000100CE07000000000000B10000005808000000000000130000800100000016000080070000001800008021000000EEEFFE80250000001800008031000000190000804B000000EEEFFE804F000000190000805B0000001A00008075000000EEEFFE80790000001A000080850000001C00008090000000EEEFFE80940000001C000080A500000022000080AE000000EEEFFE80B200000022000080D000000023000080D9000000EEEFFE80DD00000023000080FD0000002400008006010000EEEFFE800A0100002400008013010000250000801C010000EEEFFE802001000025000080280100002600008031010000EEEFFE8035010000260000803D0100002800008057010000EEEFFE805B01000028000080670100002900008070010000EEEFFE8074010000290000807D0100002A00008086010000EEEFFE808A0100002A000080920100002B0000809B010000EEEFFE809F0100002B000080AB0100002D000080AD0100002E000080B301000030000080CD010000EEEFFE80D101000031000080D201000032000080D401000033000080D701000035000080D801000036000080F2010000EEEFFE80F60100003600008002020000370000801602000038000080170200003A00008023020000EEEFFE80270200003B0000803C0200003D0000804D02000043000080530200004400008061020000450000806F020000480000807002000049000080830200004A000080860200004B000080880200004C000080890200004D000080A0020000EEEFFE80A102000051000080A202000052000080BF020000EEEFFE80C302000052000080DF02000053000080E202000054000080E402000055000080E502000056000080FC020000EEEFFE80FD0200005A000080FE0200005B0000801A0300005C0000801D0300005D0000801F0300005E000080200300005F00008037030000EEEFFE803803000063000080390300006400008056030000EEEFFE805A03000064000080760300006500008079030000660000807B030000670000807C03000068000080930300006F0000809A03000070000080A703000071000080B403000072000080C103000074000080CA030000EEEFFE80CE03000075000080CF03000076000080DC03000077000080E903000078000080EC0300007A000080ED0300007B000080FA0300007C000080070400007D000080080400007F0000801504000080000080330400008100008051040000820000806F040000830000807B040000EEEFFE807F040000830000809804000084000080B604000085000080CE04000086000080E604000087000080FE040000880000801B0500008A000080320500008B000080350500008D000080360500008D00008043050000EEEFFE80450500008D0000804E0500008E0000804F0500008F00008068050000EEEFFE806C0500008F0000806F050000900000809105000091000080920500008D0000809D050000EEEFFE80A9050000EEEFFE80AA05000093000080B1050000EEEFFE80B505000093000080DD0500009500008008060000EEEFFE800C060000960000800D060000970000801A060000980000803806000099000080450600009A000080520600009B0000805F0600009C000080600600009E0000806D0600009F0000807A060000A500008081060000A800008082060000A900008091060000AA000080A0060000AB000080A9060000AC000080B8060000AD000080C1060000AE000080CD060000AF000080E4060000B0000080FB060000B200008013070000B300008021070000B400008031070000B50000803F070000B700008055070000B800008058070000B90000805A070000BA0000805B070000BB00008072070000EEEFFE8073070000C100008074070000C20000807D070000C30000808B070000EEEFFE808F070000C4000080B0070000C5000080B3070000C6000080B5070000C7000080B6070000C8000080CD070000CA000080050006000900370009003D00000000003E006E0009003900000000003A006800090043000000000044007700090022000000000023007700090023000000000024005300090021000000000022005600090025000000000026003C0009002100000000002200360009002B00000000002C004B0009004B00000000004C00660009001900000000001A00240009001C00000000001D002D0009002200000000002300430009002C0009005F00090045000000000009000A000D002A0009000A0009000A000D004900000000004A0058000D00510009000A0009002D00000000000D003E000D002F0009002D000900250009001F0009000A000D00340009000A0009001C0009000A000D004A000000000009000A000D004B00000000004C00820009000A0009001C0009000A000D004D000000000009000A000D00340009000A0009001C0009000A000D0048000000000009000A000D003F00000000004000670009000A0009001C0009000A000D0048000900310009002B00090038000900270009002C000000000009000A000D002E000D002A0009000A0009000A000D002D000D002A0009000A000900280009005D0009005C000900590009001E00000000001F004D0009004A00090044000900550009004300090051000900780009002E000900100026002C00000000001200220009000A000D00320000000000330052000D00B40009000A0023002500000000000000000009002600000000002700E20009003C000000000009000A000D002C000D0056000D002E000D0034000D002A0009000A0009002600090029000900520009000A000D0031000D002A000D0046000D0032000D0032000D0064000D0039000D003B000D0088000D002A000D0068000D002B000D00550009000A0009001C0009000A000D0052000000000009000A000D0022000D0029000000000011008C0009000A0009001C0009000A000D00450005000600F400000008000000010000000000000008000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF1100000000C02000025000000010000000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200251100000000040000000100636C725F73656E645F6963735F696E76697465000000160029110000000004000000010030363030303030310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF77093101010000000B00108E0C0084690D0006005C000000200000002C00000058000000000000000000000016000000190000000000EEC00000000000000000FFFF000000000000FFFFFFFF00000000FFFF0000000000000000000000000A006C040000000000007C0800000100000000000000000000000000000053746F72656450726F636564757265730043444135313336460000002DBA2EF10100000000000000CE07000000000000000000000000000000000000020002000D01000000000100FFFFFFFF00000000CE0700000802000000000000FFFFFFFF00000000FFFFFFFF010001000000010000000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000000FEEFFEEF010000000100000000010000000000000000000000FFFFFFFFFFFFFFFFFFFF0900FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E31017BBEE25C010000006F90C957F826E94D9D051ED792100F7E770000002F4C696E6B496E666F002F6E616D6573002F7372632F686561646572626C6F636B002F7372632F66696C65732F633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000400000006000000010000001B00000000000000220000000800000011000000070000000A00000006000000000000000500000000000000DC513301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E00000020000000D3000000380000006F0100003800000000000000BA000000800000005C00000028000000F40C00002C0200002C0000003C00000003000000180000000600000017000000070000000A0000000B00000008000000090000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000016000000150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 AS N'sql_clr_ics.pdb'; + ADD FILE FROM 0x4D6963726F736F667420432F432B2B204D534620372E30300D0A1A4453000000000200000200000023000000A80000000000000021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38000000FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA3101380000000010000000100000000000000E00FFFF04000000FFFF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA3101380000000010000000100000000000000F00FFFF04000000FFFF0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310185AEE65C01000000FE40FD10CEC2EC4288BE81BCCB03616600000000000000000100000001000000000000000000000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F862513FC607D311905300C04FA302A1C4454B99E9E6D211903F00C04FA302A10B9D865A1166D311BD2A0000F80849BDEC1618FF5EAA104D87F76F4963833460140000000000000009155D527A7BBD840934FA83C6AC3B979FA28AFD0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D310000000000000D3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEEFFEEF010000009600000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730000633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730004000000010000004B0000004C000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001BE23001800000000EED65127411D50101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000100000001000000000000004C000000280000001BE230019D8DCB725C000000010000004B0000004C000000650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003E002A11000000002008000000000000A7100000000000000000000001000006000000000100000000636C725F73656E645F6963735F696E76697465000000001600031104000000B8060000A710000000000000010000000A0024115553797374656D00120024115553797374656D2E54657874000000000E0024115553797374656D2E4E657400160024115553797374656D2E4E65742E4D61696C000000001A0024115553797374656D2E446174612E53716C54797065730000001A0024115553797374656D2E446174612E53716C436C69656E7400001E002411554D6963726F736F66742E53716C5365727665722E536572766572001E0020110000000001000011000000000000000063726564656E7469616C730022002011010000000100001100000000000000006D61696C5072696F72697479000000001E0020110200000001000011000000000000000073625F4572726F727300000026002011030000000100001100000000000000006D6574686F645F656E756D76616C7565000000002A0020110400000001000011000000000000000073656E73697469766974795F656E756D76616C75650000002A00201105000000010000110000000000000000726563697069656E745F726F6C655F666F756E64000000002E00201106000000010000110000000000000000636F70795F726563697069656E745F726F6C655F666F756E640000003200201107000000010000110000000000000000626C696E645F636F70795F726563697069656E745F726F6C655F666F756E640016002011080000000100001100000000000000006D7367001600201109000000010000110000000000000000737472001E0020110A000000010000110000000000000000727376705F737472696E67002A0020110B0000000100001100000000000000006F7267616E697A65725F696E5F726563697069656E7473001E0020110C000000010000110000000000000000736D7470636C69656E740000160003114400000090030000F50100003800000001000000160020110E000000010000110000000000000000636F6E00160020110F000000010000110000000000000000636D640016000311E0020000580300005A00000071000000010000001600201111000000010000110000000000000000726472000200060016000311E00200008C0300001A0100000A0100000100000016002011130000000100001100000000000000007264720002000600020006001600031144000000C803000089000000F1060000010000001A0020113D0000000100001100000000000000006974656D00000000020006001600031144000000300400003D000000BD0800000100000016002011490000000100001100000000000000006174740016000311CC0300002C0400001C000000DD08000001000000160020114A0000000100001100000000000000006500000002000600020006001600031144000000640400001A0000002209000001000000160020114B00000001000011000000000000000065000000020006001600031144000000980400001A0000007F09000001000000160020114D00000001000011000000000000000065000000020006001600031144000000CC0400001A000000BB09000001000000160020114E00000001000011000000000000000065000000020006001600031144000000000500001A000000180A000001000000160020115000000001000011000000000000000065000000020006001600031144000000340500001A000000750A0000010000001600201152000000010000110000000000000000650000000200060016000311440000006C0500006C000000A70C0000010000001A002011560000000100001100000000000000006164647200000000020006001600031144000000A40500006C0000003C0D0000010000001A002011590000000100001100000000000000006164647200000000020006001600031144000000DC0500006C000000D10D0000010000001A0020115C00000001000011000000000000000061646472000000000200060016000311440000004C060000E50000004E0F0000010000001A00201160000000010000110000000000000000636F6E74797065001A0020116100000001000011000000000000000048544D4C000000001A00201162000000010000110000000000000000617643616C000000020006001600031144000000800600001A0000003510000001000000160020116300000001000011000000000000000065000000020006001600031144000000B40600001A0000008C10000001000000160020116500000001000011000000000000000065000000020006000200060062010404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004020000040000000C00000001000700040600013401000001450180940194AA01980E0198FD019AAE019ADA019B0B01A16401A9BB01B02801B09F01B84A02810701819501820A02824D0183700283B301881E0288590289800289D2028A1C028A74028AB5028B0400028B73028C9F028D03028D65028DA900028E04028E5B028E98028ECF028F1B028F7F028FE00290460290B90290DE0291140291BA02926E0292B802930C02936E02939E0293EB000294D602956A02971D0297D70298C30299BE079B3F099B3F019B3F029B77029C09029CAA029D5D029E03029EC5029F9B02A08B02A21407A24A09A24A01A24A01A32101A44802A4DF01A56F01A64C02A6E101A77D02A81701A8C602AC5902AE7706B0CB01B0CB02B10806B22E01B22E02B26B06B39601B39602B3D402B50502B63101B9C501BAA101BB5501BC4102BD5101BDFA00020006002E002A110000000084080000000000002C000000000000000000000003000006A710000001000000002E6363746F72002E000404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004010000040100000C0000000100000602000600F2000000E81100000000000001000100A7100000000000007C010000DC11000000000000320000800100000035000080070000003C00008031000000EEEFFE80380000003D000080390000003E000080450000003F0000804E0000004000008056000000420000805F000000EEEFFE8063000000430000806400000044000084710000004A0000807A0000004B0000807B0000004C00008087000000EEEFFE808B0000004D0000808C0000004E000080940000004F0000809C00000050000080A700000052000080A800000053000080B200000054000080B300000055000080BB00000056000080BE000000EEEFFE80CA000000EEEFFE80CB00000057000080CC0000005900008AD900000065000080F1000000660000800A010000680000801301000069000080140100006A00008020010000EEEFFE80240100006B000080250100006C0000802D0100006D000080350100006E0000804C010000710000804D0100007200008056010000EEEFFE805A0100007200008064010000730000806D010000EEEFFE8071010000730000807B0100007400008084010000EEEFFE80880100007400008092010000750000809B010000EEEFFE809F01000075000080A901000076000080B2010000EEEFFE80B601000076000080C001000077000080C9010000EEEFFE80CD01000077000080E501000078000080FD010000EEEFFE8001020000780000800B020000790000800C0200007A000080140200007B00008017020000EEEFFE8023020000EEEFFE80240200007C0000802C0200007D0000802D0200008300008047020000EEEFFE804B02000083000080570200008400008071020000EEEFFE80750200008400008081020000850000808A020000EEEFFE808E020000850000809A02000086000080A3020000EEEFFE80A702000086000080C702000087000080D0020000EEEFFE80D402000087000080F402000088000080FD020000EEEFFE8001030000880000800A0300008900008013030000EEEFFE8017030000890000801F0300008A00008028030000EEEFFE802C0300008A000080340300008B0000804E030000EEEFFE80520300008B0000805E0300008C00008078030000EEEFFE807C0300008C000080880300008D000080A2030000EEEFFE80A60300008D000080B20300008F000080CC030000EEEFFE80D00300008F000080DC03000090000080E5030000EEEFFE80E903000090000080F203000091000080FB030000EEEFFE80FF03000091000080070400009300008021040000EEEFFE80250400009400008026040000950000802E04000096000080310400009800008032040000990000804C040000EEEFFE8050040000990000805C0400009A000080700400009B000080710400009D0000807A040000EEEFFE807E0400009D0000808A0400009E00008093040000EEEFFE80970400009E000080A30400009F000080AC040000EEEFFE80B00400009F000080BC040000A1000080C5040000EEEFFE80C9040000A1000080D5040000A2000080DE040000EEEFFE80E2040000A200008000050000A300008009050000EEEFFE800D050000A30000802D050000A900008033050000AB0000804D050000EEEFFE8051050000AB0000805D050000AC000084A8050000EEEFFE80AC050000B1000080B8050000B3000080E1050000EEEFFE80E5050000B3000080FD050000B400008011060000EEEFFE8015060000B400008046060000B50000805A060000EEEFFE805E060000B50000808F060000B6000080A3060000EEEFFE80A7060000B6000080D8060000B8000080DB060000B9000080DE060000BA000080E1060000BC000080E2060000BC000080EC060000EEEFFE80F1060000BC000080F8060000BD000080F9060000BE00008015070000EEEFFE8019070000BF0000801A070000C00000801D070000C10000801E070000C20000803A070000EEEFFE803E070000C30000803F070000C400008042070000C500008043070000C60000805F070000EEEFFE8063070000C700008064070000C800008067070000C900008068070000CA00008072070000EEEFFE8076070000CB00008077070000CC00008079070000CE0000807A070000EEEFFE8080070000BC0000808B070000D00000809E070000EEEFFE80A2070000D0000080C4070000D1000080D7070000EEEFFE80DB070000D1000080FD070000D200008010080000EEEFFE8014080000D200008036080000D400008041080000EEEFFE8045080000D400008056080000DA0000805D080000DB0000806C080000DC0000807B080000DD00008084080000DE0000808D080000E000008099080000EEEFFE809D080000E10000809E080000E20000809F080000E2000080BB080000EEEFFE80BD080000E2000080C4080000E3000080C5080000E5000080C6080000E6000080DA080000E7000080DD080000E8000080DF080000E9000080E0080000EA000080F9080000EC000080FA080000EEEFFE8000090000E200008008090000ED00008009090000EEEFFE800A090000F00000800B090000F10000801F090000F200008022090000F300008024090000F400008025090000F50000803C090000EEEFFE803D090000F90000803E090000FA0000805B090000EEEFFE805F090000FA0000807C090000FB0000807F090000FC00008081090000FD00008082090000FE00008099090000EEEFFE809A090000020100809B09000003010080B809000004010080BB09000005010080BD09000006010080BE09000007010080D5090000EEEFFE80D60900000B010080D70900000C010080F4090000EEEFFE80F80900000C010080150A00000D010080180A00000E0100801A0A00000F0100801B0A000010010080320A0000EEEFFE80330A000014010080340A000015010080510A0000EEEFFE80550A000015010080720A000016010080750A000017010080770A000018010080780A0000190100808F0A000020010080960A000021010080A30A000022010080BC0A000023010080C90A000024010080E70A000025010080050B000027010080120B000028010080300B0000290100804E0B00002A0100806C0B00002B010080780B0000EEEFFE807C0B00002B010080950B00002C010080AE0B00002D010080C70B00002E010080E00B00002F010080F90B000030010080170C000031010080350C000033010080380C0000EEEFFE804D0C0000360100805A0C0000370100805C0C000039010080690C00003A0100806B0C00003C010080780C00003D0100807A0C00003F0100807C0C000042010080930C000043010080960C000045010080970C000045010080A50C0000EEEFFE80A70C000045010080B00C000046010080B10C000047010080CB0C0000EEEFFE80CF0C000047010080D20C000048010080120D000049010080130D0000450100801E0D0000EEEFFE802A0D0000EEEFFE802B0D00004B0100802C0D00004B0100803A0D0000EEEFFE803C0D00004B010080450D00004C010080460D00004D010080600D0000EEEFFE80640D00004D010080670D00004E010080A70D00004F010080A80D00004B010080B30D0000EEEFFE80BF0D0000EEEFFE80C00D000051010080C10D000051010080CF0D0000EEEFFE80D10D000051010080DA0D000052010080DB0D000053010080F50D0000EEEFFE80F90D000053010080FC0D0000540100803C0E0000550100803D0E000051010080480E0000EEEFFE80540E0000EEEFFE80550E0000570100805C0E0000EEEFFE80600E000058010080610E000059010080750E00005A0100809F0E00005B010080A00E00005D010080D50E0000EEEFFE80D90E00005E010080DA0E00005F010080E70E000060010080050F000061010080120F0000620100801F0F0000630100802C0F0000640100802D0F0000660100803A0F000067010080470F00006D0100804E0F0000700100804F0F0000710100805E0F0000720100806D0F0000730100807C0F0000740100808B0F000075010080940F000076010080A00F000077010080BE0F000078010080D50F00007A010080ED0F00007B010080FC0F00007C0100800C1000007D0100801B1000007F01008032100000800100803510000081010080371000008201008038100000830100804F100000EEEFFE80501000008B010080511000008C0100805B1000008D01008069100000EEEFFE806D1000008E010080891000008F0100808C100000900100808E100000910100808F10000092010080A6100000960100800500060009005400090070000000000009000A000D004E000D0032000D0018000D002500000000000D000E0011001A0018003F00110012001500260000000000150016001900250019002500190068001500160019003C0015001600150021001100120000000000000000000D000E000D0022000D0034000D00490014003B000D000E00110022000000000011001200150021001500210015006C001100120015002D00000000002E00510015002900000000002A00490015003000000000003100570015002500000000002600400015002B00000000002C004E00150038000000000039006E0015004B00000000004C006B001100120011001D000D000E0000000000000000000D00190009000A0009004300000000004400630009004B00000000004C006100090022000000000023004300090023000000000024005A00090021000000000022005600090025000000000026003C0009002100000000002200360009002B00000000002C004B0009004300000000004400630009004900000000004A00600009004B00000000004C00630009005300000000005400720009001900000000001A00240009001F000000000020003300090045000000000009000A000D002C0009000A0009000A000D004900000000004A0058000D00510009000A0009002400000000002500490009002900000000002A00530009002F000000000030005F0009001B00000000001C002F0009001D00000000001E004C000900250000000000260053000900370009004D00000000004E00930009000D00000000000D00870009004800000000004900B90009005200000000005300EB0009005A00000000005B00FA0009004600000000004700E80009002B000900300009003600090010001E0027000000000012001A0009000A000D004500000000000D000E0011002D000D000E000D004F00000000000D000E00110032000D000E000D005B00000000000D000E00110038000D000E000D006600000000000D000E001100170009000A00000000001B001D0009003900000000003A00C10009004300000000004400D50009004F00000000005000ED0009002200000000002300770009002D000900250009001F000900250009001F00090026000000000009000A000D001400210042000000000016001D000D000E001100120015003E00110012001100240011001200150067000D000E00000000001E00200009000A000000000009000A000D003C0009000A0009001C0009000A000D004B000000000009000A000D004B00000000004C00820009000A0009001C0009000A000D0047000000000009000A000D003C0009000A0009001C0009000A000D0049000000000009000A000D005900000000005A008E0009000A0009001C0009000A000D004E000000000009000A000D006500000000006600A10009000A0009001C0009000A000D0054000900310009002B00090047000900270009004D00090047000900280009005D0009005C000900590009001E00000000001F004D0009004A00090044000900550009004300090051000900510009001E000000000011002E001100170011002E001100170011002E0011001700110017000900780009002E000900100026002C00000000001200220009000A000D00320000000000330052000D00C90009000A002300250000000000000000000900100026002C00000000001200220009000A000D00320000000000330052000D00CE0009000A002300250000000000000000000900100026002D00000000001200220009000A000D00320000000000330052000D00D40009000A00230025000000000000000000090026000000000009000A000D0023000D00C80009000A00090036000000000009000A000D002C000D0056000D002E000D0034000D002A0009000A0009002600090029000900320009000A000D0035000D002A000D004E000D0035000D0032000D0064000D0046000D003B000D0088000D002A000D0068000D002B000D00550009000A0009001C0009000A000D0052000000000009000A000D0022000D002900000000001100710009000A0009001C0009000A000D00450005000600F200000024000000A7100000010001002C000000000000000100000018000000000000001F00008005006E00F40000000800000001000000000000001000000000000000240000003C00000054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF120000000140200005500000001000000250000000100000001000000010000003D00000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C00000018000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200251100000000040000000100636C725F73656E645F6963735F696E7669746500000016002911000000000400000001003036303030303031000016002511000000002408000001002E6363746F7200000000160029110000000024080000010030363030303030330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF77093101010000000B00108E0C0084690D0006005C0000003C0000002C00000058000000000000000000000016000000190000000000EEC00000000000000000FFFF000000000000FFFFFFFF00000000FFFF0000000000000000000000000A0088080000000000002C1200000100000000000000000000000000000053746F72656450726F636564757265730043444135313336460000002DBA2EF10100000000000000A71000000000000000000000000000000000000001000000A71000002C00000000000000000000000000000000000000020002000D01000000000100FFFFFFFF00000000D31000000802000000000000FFFFFFFF00000000FFFFFFFF010001000000010000000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000000FEEFFEEF010000000100000000010000000000000000000000FFFFFFFFFFFFFFFFFFFF0900FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310185AEE65C01000000FE40FD10CEC2EC4288BE81BCCB036166770000002F4C696E6B496E666F002F6E616D6573002F7372632F686561646572626C6F636B002F7372632F66696C65732F633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000400000006000000010000001B00000000000000220000000800000011000000070000000A00000006000000000000000500000000000000DC513301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E00000020000000D3000000380000008B0100003800000000000000BA000000800000005C00000028000000C81A0000440200002C0000006C000000030000001F000000060000001E000000070000000A0000000B00000008000000090000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001D0000001C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 AS N'sql_clr_ics.pdb'; GO -PRINT N'Creating Procedure [dbo].[clr_send_ics_invite]...'; +PRINT N'Creating [dbo].[clr_send_ics_invite]...'; +GO +SET ANSI_NULLS OFF +GO +SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[clr_send_ics_invite] - @from [nvarchar](4000), - @to [nvarchar](4000), - @cc [nvarchar](4000) = null, - @reply_to [nvarchar](4000) = null, - @subject [nvarchar](4000), - @body [nvarchar](4000) = null, - @location [nvarchar](4000) = null, - @start_time_utc [datetime] = null, - @end_time_utc [datetime] = null, - @timestamp_utc [datetime] = null, - @smtp_server [nvarchar](4000) = null, - @port [int] = 25, - @use_ssl [bit] = 0, - @username [nvarchar](4000) = null, - @password [nvarchar](4000) = null, + @profile_name [sysname] = NULL, + @recipients [nvarchar](4000) = NULL, + @copy_recipients [nvarchar](4000) = NULL, + @blind_copy_recipients [nvarchar](4000) = NULL, + @from_address [nvarchar](4000) = NULL, + @reply_to [nvarchar](4000) = NULL, + @subject [nvarchar](255) = N'SQL Server Meeting', + @body [nvarchar](4000) = NULL, + @body_format [nvarchar](20) = N'TEXT', + @importance [nvarchar](6) = N'Normal', + @sensitivity [nvarchar](12) = N'Public', + @file_attachments [nvarchar](4000) = NULL, + @location [nvarchar](4000) = NULL, + @start_time_utc [datetime] = NULL, + @end_time_utc [datetime] = NULL, + @timestamp_utc [datetime] = NULL, + @method [nvarchar](14) = N'REQUEST', + @sequence [int] = 0, + @prod_id [nvarchar](4000) = NULL, @use_reminder [bit] = 1, @reminder_minutes [int] = 15, @require_rsvp [bit] = 0, - @cancel_event_identifier [uniqueidentifier] = null, - @event_identifier [uniqueidentifier] = null OUTPUT, - @suppress_info_messages [bit] = 0 + @recipients_role [nvarchar](15) = N'REQ-PARTICIPANT', + @copy_recipients_role [nvarchar](15) = N'OPT-PARTICIPANT', + @blind_copy_recipients_role [nvarchar](15) = N'NON-PARTICIPANT', + @smtp_servername [nvarchar](4000) = N'localhost', + @port [int] = 25, + @enable_ssl [bit] = 0, + @use_default_credentials [bit] = 0, + @username [nvarchar](4000) = NULL, + @password [nvarchar](4000) = NULL, + @suppress_info_messages [bit] = 0, + @event_identifier [nvarchar](4000) = NULL OUTPUT WITH EXECUTE AS CALLER AS EXTERNAL NAME [sql_clr_ics].[StoredProcedures].[clr_send_ics_invite] From 9479b5ea0baac2b5bb7a451953485444ddc6f7b5 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:33:19 +0300 Subject: [PATCH 11/27] implemented usage of body_format parameter --- sql_clr_ics/clr_send_ics_invite.cs | 2 +- sql_clr_ics/sql_clr_ics_install.sql | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 51798a7..82aff12 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -219,7 +219,7 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s msg.Subject = subject.Value; msg.Body = body.Value; msg.Priority = mailPriority; - msg.IsBodyHtml = true; + msg.IsBodyHtml = (body_format.Value == "HTML"); if (!file_attachments.IsNull) { diff --git a/sql_clr_ics/sql_clr_ics_install.sql b/sql_clr_ics/sql_clr_ics_install.sql index e120f44..d5653df 100644 --- a/sql_clr_ics/sql_clr_ics_install.sql +++ b/sql_clr_ics/sql_clr_ics_install.sql @@ -54,14 +54,14 @@ PRINT N'Creating Assembly [dbo].[sql_clr_ics]...'; GO CREATE ASSEMBLY [sql_clr_ics] AUTHORIZATION [dbo] - FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01030086AEE65C0000000000000000E00022200B013000003E00000008000000000000725C000000200000006000000000001000200000000200000400000000000000060000000000000000A000000002000000000000030060850000100000100000000010000010000000000000100000000000000000000000205C00004F000000006000000404000000000000000000000000000000000000008000000C000000E85A00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000783C000000200000003E000000020000000000000000000000000000200000602E7273726300000004040000006000000006000000400000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000004600000000000000000000000000004000004200000000000000000000000000000000545C0000000000004800000002000500783200007028000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B300600A71000000100001100280E00000A0A0F04280F00000A2D1E0F1D280F00000A2C090F1C281000000A2D0C0F00280F00000A16FE012B0117130D110D39F5010000007201000070731100000A130E110E6F1200000A130F110E6F1300000A000F00280F00000A131011102C6900110F72310000706F1400000A00110F6F1500000A13110011116F1600000A16FE01131211122C1C0011116F1700000A00110E6F1800000A00728A010070731900000A7A001111166F1A00000A10000011116F1700000A0000DE0D11112C0811116F1B00000A00DC00110F72FA0100706F1400000A00110F6F1C00000A72EB050070178C2B0000016F1D00000A26110F6F1C00000A72F50500700F00281E00000A6F1D00000A26110F6F1500000A13130011136F1600000A16FE01131411142C280011136F1700000A00110E6F1800000A0072070600700F00281E00000A281F00000A731900000A7A000F04280F00000A131511152C0A1113166F1A00000A10040F05280F00000A131611162C0A1113176F1A00000A10050F19280F00000A131711172C0A1113186F1A00000A10190F1A282000000A131811182C0A1113196F2100000A101A0F1B281000000A131911192C0A11131A6F2200000A101B0F1C281000000A131A111A2C1811131B6F2200000A131B121B282300000A282400000A101C0F1D280F00000A2C0C0F1C282300000A16FE012B0116131C111C2C0A11131C6F1A00000A101D0011136F1700000A0000DE0D11132C0811136F1B00000A00DC110E6F1800000A00000F06280F00000A2D0E0F06281E00000A282500000A2B0117131D111D2C0C7241060070282600000A10060F08280F00000A2D0E0F08281E00000A282500000A2B0117131E111E2C0C7267060070282600000A10080F0F282700000A131F111F2C0C282800000A282900000A100F0F0D282700000A132011202C200F0F282A00000A13211221230000000000C07240282B00000A282900000A100D0F0E282700000A132211222C200F0D282A00000A13211221230000000000004E40282B00000A282900000A100E0F14282000000A132311232C091F0F282C00000A10140F13281000000A132411242C0817282400000A10130F1F281000000A132511252C0816282400000A101F0F12280F00000A2D0E0F12281E00000A282500000A2B0117132611262C0C7271060070282600000A10120F09280F00000A2D0E0F09281E00000A282500000A2B0117132711272C0C7297060070282600000A10090F0A280F00000A2D0E0F0A281E00000A282500000A2B0117132811282C0C72A5060070282600000A100A0F19280F00000A2D0E0F19281E00000A282500000A2B0117132911292C0C72B3060070282600000A10190F1A282000000A132A112A2C091F19282C00000A101A0F1B281000000A132B112B2C0816282400000A101B0F1D280F00000A2D0E0F1D281E00000A282500000A2B0117132C112C2C0C0017282400000A101C002B40000F1E280F00000A2D0E0F1E281E00000A282500000A2B0117132D112D2C0C72C7060070282600000A101E0F1D281E00000A0F1E281E00000A732D00000A0A000F16280F00000A132E112E2C0C72C9060070282600000A10160F17280F00000A132F112F2C0C72E9060070282600000A10170F18280F00000A133011302C0C7209070070282600000A10180F10280F00000A133111312C0C7229070070282600000A10100F11282000000A133211322C1E0F10281E00000A7239070070282E00000A2D03162B0117282C00000A10110E20280F00000A133311332C200E20282F00000A13341234FE161D0000016F3000000A282600000A8110000001733100000A0C0F04280F00000A2D0E0F04281E00000A282500000A2B0117133511352C0C0872470700706F3200000A260F01280F00000A2D0E0F01281E00000A282500000A2C310F02280F00000A2D0E0F02281E00000A282500000A2C1A0F03280F00000A2D0E0F03281E00000A282500000A2B01172B0116133611362C0C0872A10700706F3200000A260F08281E00000A7266080070283300000A2C130F08281E00000A7267060070283300000A2B0116133711372C180872700800700F08281E00000A281F00000A6F3200000A260F10281E00000A171203280100002B16FE01133811382C310872DC0800700F10281E00000AD003000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F0A281E00000A171204280200002B16FE01133911392C310872300900700F0A281E00000AD004000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F09281E00000A171201280300002B16FE01133A113A2C3108728C0900700F09281E00000AD015000001283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A26161305161306161307007E01000004133B16133C388F000000113B113C9A133D000F01280F00000A2D10113D0F16281E00000A282E00000A2B0116133E113E2C0500171305000F02280F00000A2D10113D0F17281E00000A282E00000A2B0116133F113F2C0500171306000F03280F00000A2D10113D0F18281E00000A282E00000A2B0116134011402C050017130700110511065F11075F134111412C03002B1200113C1758133C113C113B8E693F66FFFFFF0F01280F00000A2D07110516FE012B0116134211422C220872E80900700F16281E00000A7E010000046F3000000A283800000A6F3200000A260F02280F00000A2D07110616FE012B0116134311432C2208724E0A00700F17281E00000A7E010000046F3000000A283800000A6F3200000A260F03280F00000A2D07110716FE012B0116134411442C220872BE0A00700F18281E00000A7E010000046F3000000A283800000A6F3200000A26086F3900000A16FE02134511452C11723A0B007008283A00000A731900000A7A733B00000A130811080F06281E00000A6F3C00000A0011080F07281E00000A6F3D00000A001108076F3E00000A001108176F3F00000A000F0B280F00000A16FE01134611462C6C00000F0B281E00000A178D3000000125161F3B9D6F4000000A13471613482B43114711489A1349000011086F4100000A1149734200000A6F4300000A0000DE1C134A00729C0B00701149114A6F4400000A283800000A731900000A7A00114817581348114811478E6932B500000011080F04281E00000A734500000A6F4600000A0000DE1A134B0072D40B0070114B6F4400000A284700000A731900000A7A00000F05280F00000A2D110F05281E00000A282500000A16FE012B0116134C114C2C1D11086F4800000A0F05281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134D00720A0C0070114D6F4400000A284700000A731900000A7A000011086F4B00000A0F01281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134E0072380C0070114E6F4400000A284700000A731900000A7A00000F02280F00000A2D110F02281E00000A282500000A16FE012B0116134F114F2C1D11086F4C00000A0F02281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A135000726A0C007011506F4400000A284700000A731900000A7A00000F03280F00000A2D110F03281E00000A282500000A16FE012B0116135111512C1D11086F4D00000A0F03281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A13520072A60C007011526F4400000A284700000A731900000A7A733100000A1309110972EE0C00706F3200000A261109720E0D00700F12281E00000A281F00000A6F3200000A261109722A0D00706F3200000A26110972420D00700F10281E00000A6F3700000A281F00000A6F3200000A26110972580D00700F11284E00000A8C2B000001281F00000A6F3200000A26110972720D00706F3200000A261109728C0D00700F0D282A00000A8C1C000001281F00000A6F3200000A26110972C60D00700F0F282A00000A8C1C000001281F00000A6F3200000A26110972000E00700F0E282A00000A8C1C000001281F00000A6F3200000A260F0C280F00000A16FE01135311532C19110972360E00700F0C281E00000A284700000A6F3200000A261109724C0E00700E20281E00000A281F00000A6F3200000A261109725C0E007011086F4F00000A281F00000A6F3200000A261109727C0E007011086F4F00000A281F00000A6F3200000A26110972BE0E007011086F5000000A281F00000A6F3200000A26110972D60E007011086F5100000A6F5200000A281F00000A6F3200000A26110972000F00700F0A281E00000A6F3700000A281F00000A6F3200000A26071354115445030000000200000011000000200000002B2D110972140F00706F3200000A262B201109722A0F00706F3200000A262B11110972400F00706F3200000A262B022B000F15282300000A2D0772560F00702B0572900F0070130A16130B0011086F4B00000A6F5300000A13552B6C11556F5400000A13560011566F5200000A11086F5100000A6F5200000A282E00000A135711572C0317130B110972D00F00701A8D0E000001251611566F5500000AA2251711566F5200000AA22518110AA225190F16281E00000A6F3700000AA2285600000A6F3200000A260011556F5700000A2D8BDE0D11552C0811556F1B00000A00DC0011086F4C00000A6F5300000A13582B6C11586F5400000A13590011596F5200000A11086F5100000A6F5200000A282E00000A135A115A2C0317130B110972D00F00701A8D0E000001251611596F5500000AA2251711596F5200000AA22518110AA225190F17281E00000A6F3700000AA2285600000A6F3200000A260011586F5700000A2D8BDE0D11582C0811586F1B00000A00DC0011086F4D00000A6F5300000A135B2B6C115B6F5400000A135C00115C6F5200000A11086F5100000A6F5200000A282E00000A135D115D2C0317130B110972D00F00701A8D0E0000012516115C6F5500000AA22517115C6F5200000AA22518110AA225190F18281E00000A6F3700000AA2285600000A6F3200000A2600115B6F5700000A2D8BDE0D115B2C08115B6F1B00000A00DC110B16FE01135E115E2C400011086F4D00000A11086F5100000A6F5800000A001109726710007011086F5100000A6F5500000A11086F5100000A6F5200000A283800000A6F3200000A26000E13131B111B285900000A2D1F111B0F10281E00000A7239070070283300000A282400000A285A00000A2B02111B285B00000A135F115F2C5400110972481100706F3200000A26110972621100700F14284E00000A8C2B000001281F00000A6F3200000A26110972821100706F3200000A26110972A01100706F3200000A26110972CA1100706F3200000A2600110972E01100706F3200000A26110972F61100706F3200000A26735C00000A130C00110C0F19281E00000A6F5D00000A00110C0F1A284E00000A6F5E00000A00110C0F1C282300000A6F5F00000A00110C0F1B282300000A6F6000000A00110C066F6100000A007212120070736200000A136011606F6300000A722E1200700F10281E00000A6F3700000A6F6400000A0011606F6300000A723C12007072461200706F6400000A000F07281E00000A725E120070736200000A286500000A136111086F6600000A11616F6700000A0011096F3000000A1160286500000A136211086F6600000A11626F6700000A0011086F6800000A7272120070728E1200706F6900000A0000DE1A13630072D612007011636F4400000A284700000A731900000A7A0000110C11086F6A00000A000E1F286B00000A285B00000A136411642C1C286C00000A721A1300700E20281E00000A281F00000A6F6D00000A0000DE1A136500725C13007011656F4400000A284700000A731900000A7A2A00413C0100020000007A00000044000000BE0000000D00000000000000020000001301000004010000170200000D0000000000000000000000C508000018000000DD0800001C0000001E000001000000000A09000018000000220900001A0000001E000001000000003D090000420000007F0900001A0000001E000001000000009A09000021000000BB0900001A0000001E00000100000000D609000042000000180A00001A0000001E00000100000000330A000042000000750A00001A0000001E00000102000000A50C0000790000001E0D00000D00000000000000020000003A0D000079000000B30D00000D0000000000000002000000CF0D000079000000480E00000D00000000000000000000004E0F0000E7000000351000001A0000001E00000100000000501000003C0000008C1000001A0000001E0000012202286E00000A002AB21A8D2D000001251672C9060070A2251772E9060070A225187209070070A225197286130070A280010000042A000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000CC060000237E000038070000380A000023537472696E67730000000070110000941300002355530004250000100000002347554944000000142500005C03000023426C6F620000000000000002000001571D0208090A000000FA013300160000010000003A000000040000000E00000003000000210000006E0000000B0000000D0000000100000004000000010000000300000002000000030000000000AD0401000000000006008303DB060600F003DB060600CE02BC060F000C0700000600E2022A05060066032A05060047032A050600D7032A050600A3032A050600BC032A0506000F032A0506002A032A050600AC02FB060600B408F0040A00F9026E060A00300445070A00440245070A001F0045070A00110545070E006509DB080E00100A9D0406002D0681090E0097019D040E000E099D040A00B705F8080A004F01F8080A001106F80806004702F00406002401F0040600C505F00406000E00B1000E002B089D040E006C0234020E00A8099D0406000905F0040E00A301DB080E006C04DB080A00AA05CF050A003701CF050A000406CF050600B301F0040A005005F80806002200F0040A006106F80806005A04F00406007302F0040600BF01F0040600FF05F0040E007D059D040E0019099D04060001007E040E0067059D0406008906E7070E00D809FA000E0092059D040E003C05FA000A009D096E060A0064026E060000000028000000000001000100010010005A07000039000100010003010000CF0600008D000200040003010000150800008D000B000400110032075F0206068C00630256805300660256807E00660256808600660256806800660256803F00660256804B00660256807600660256806F00660206068C006302568038006A02568043006A0256805B006A02502000000000960098026E0201004032000000008618A306060022004932000000009118A906B5022200000001000E02000002004F08000003004A0800000400440800000500370800000600E90500000700D30800000800D30900000900A80800000A00770100000B001D0A00000C006A0800000D00210500000E00D90000000F00CC0000001000E800000011005F01000012008201000013001901000014003B0600001500760700001600F20500001700EE0100001800E90100001900E30100001A00240200001B00470900001C00E50400001D00CF0700001E001B0200001F006601000020001B070000210048060900A30601001100A30606001900A3060A002900A30610003100A30610003900A30610004100A30610004900A30610005100A30610005900A30610006100A30610006900A30610007900A306060021019707B7008100BD04BD009900BD04BD00C900A3061000C9004101C10031011C05060039018D091000D1001F06C60041018E08BD00410181020600310181020600F100A3061000D9002D04CB00490187020600D1000608D10051011804D70081000E04DF006901A108E3009100BD04BD00D9001C00E900D9000E05EF0099000E04BD009900E608F5006901290AFB008100E60800018900BD04BD00E100B60906018900E6080B0189000E041201E1006B0717019100E6081D012901A30623016901E9092901E90021012F0171005804DF00B100A3060600B100500234016901F509290119018F023A017101D101490119013C07520169015906DF006901A1085A01B10061046B0169019A086F01B900A3060600B900C7081000B900CA091000B900030A7501B900C8047B016901F2088001B9005A0887019101A30610000C00F6009601F1008B01DF000101A3061000B90000059C0169019A08A301B9004C09A90169016F01AF01A101F6001000B900E205A901B9003100A901B900A900A90191000E046B01B900C109DF00B900BB08DF00B900F704B50101011F08DF0014009506C4011C002409D5010101FE01DF006901A108DA01A9017809BD001400F600960199007802E10199002901E70199002504E101C100A3060600C1005C091000C1003E090100C100B5077B01C100D7047B01C1008707F0010901A306100009010608F601B101F600230111013A04FC01B9007B0806022400F6009601B900FA071502C101F6002301C1005A011B02990030092102C9015B022802D1015A0110007100A306060008000C003702080010003C0208001400410208001800460208001C004B02080020005002080024005502080028005A02080030003702080034003C0208003800410220006B003C022E000B00B9022E001300C2022E001B00E1022E002300EA022E002B00FB022E0033002B032E003B0031032E004300EA022E004B0031032E00530031032E005B0043032E006300500315008D01BB01CD010C02048000000100000000000000000000000000B00600000400000000000000000000002E02A000000000000400000000000000000000002E029400000000000400000000000000000000002E02F004000000000300020004000200690044016900610169006601000000436F6C6C656374696F6E60310049456E756D657261746F7260310047657453716C496E743332003C4D6F64756C653E006765745F4343005055424C49430041444400505249564154450052454652455348005055424C49534800434F4E464944454E5449414C0043414E43454C004445434C494E45434F554E5445520052455155455354005245504C590076616C75655F5F0053797374656D2E44617461006D73636F726C6962006765745F4263630053797374656D2E436F6C6C656374696F6E732E47656E6572696300656E645F74696D655F7574630073746172745F74696D655F7574630074696D657374616D705F757463004164640053797374656D2E436F6C6C656374696F6E732E5370656369616C697A65640070726F645F6964004E657747756964006F705F42697477697365416E64004462436F6D6D616E6400437265617465436F6D6D616E640053716C436F6D6D616E640053656E64006D6574686F640070617373776F7264005265706C61636500696D706F7274616E63650073657175656E6365006765745F4D657373616765004D61696C4D6573736167650043726564656E7469616C43616368650049446973706F7361626C650052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500626C696E645F636F70795F726563697069656E74735F726F6C65006765745F446973706C61794E616D650070726F66696C655F6E616D6500757365726E616D6500736D74705F7365727665726E616D650053797374656D2E4E65742E4D696D650053716C4461746554696D6500417070656E644C696E65006765745F506970650053716C5069706500436F6E74656E7454797065006F705F46616C736500436C6F736500446973706F736500547279506172736500636C725F73656E645F6963735F696E76697465004E65757472616C5265736F75726365734C616E67756167654174747269627574650044656275676761626C6541747472696275746500417373656D626C795469746C654174747269627574650053716C50726F63656475726541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F56616C7565004164645769746856616C7565006F705F547275650047657453716C537472696E6700437265617465416C7465726E6174655669657746726F6D537472696E6700546F537472696E67006765745F4C656E677468004E6574776F726B43726564656E7469616C0053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C0053797374656D2E4E65742E4D61696C0073716C5F636C725F6963732E646C6C006765745F49734E756C6C007365745F4973426F647948746D6C007365745F456E61626C6553736C00656E61626C655F73736C0053797374656D006765745F46726F6D007365745F46726F6D00456E756D0047657453716C426F6F6C65616E004F70656E006C6F636174696F6E0053797374656D2E5265666C656374696F6E004E616D6556616C7565436F6C6C656374696F6E0053716C506172616D65746572436F6C6C656374696F6E004D61696C41646472657373436F6C6C656374696F6E004174746163686D656E74436F6C6C656374696F6E00416C7465726E61746556696577436F6C6C656374696F6E004462436F6E6E656374696F6E0053716C436F6E6E656374696F6E00457863657074696F6E0053797374656D2E446174612E436F6D6D6F6E006765745F546F007265706C795F746F00726571756972655F727376700043686172004462446174615265616465720053716C44617461526561646572004578656375746552656164657200537472696E674275696C646572007573655F72656D696E646572006576656E745F6964656E74696669657200546F55707065720053716C506172616D65746572004D6963726F736F66742E53716C5365727665722E5365727665720049456E756D657261746F7200476574456E756D657261746F72002E63746F72002E6363746F720073716C5F636C725F6963730053797374656D2E446961676E6F7374696373006943616C4D6574686F64730053797374656D2E52756E74696D652E436F6D70696C657253657276696365730053797374656D2E5265736F757263657300446562756767696E674D6F6465730073757070726573735F696E666F5F6D65737361676573006943616C526F6C6573004765744E616D65730053797374656D2E446174612E53716C54797065730053746F72656450726F63656475726573004164644D696E757465730072656D696E6465725F6D696E75746573007365745F43726564656E7469616C73006765745F44656661756C744E6574776F726B43726564656E7469616C73007365745F55736544656661756C7443726564656E7469616C73007573655F64656661756C745F63726564656E7469616C730053797374656D2E436F6C6C656374696F6E73006765745F48656164657273006765745F506172616D6574657273006943616C436C617373006765745F41646472657373004D61696C416464726573730066726F6D5F6164647265737300626C696E645F636F70795F726563697069656E7473006765745F4174746163686D656E74730066696C655F6174746163686D656E7473006765745F416C7465726E6174655669657773006765745F486173526F777300436F6E63617400466F726D617400626F64795F666F726D6174004F626A656374006765745F5375626A656374007365745F5375626A656374007375626A6563740053797374656D2E4E6574006F705F496D706C696369740053706C69740053797374656D2E446174612E53716C436C69656E7400536D7470436C69656E74004174746163686D656E74006765745F43757272656E74006F705F4C6F676963616C4E6F74007365745F506F727400706F7274006765745F5265706C79546F4C697374007365745F486F7374004943726564656E7469616C734279486F7374004D6F76654E6578740053797374656D2E54657874007365745F436F6D6D616E64546578740053716C436F6E7465787400416C7465726E61746556696577006765745F5574634E6F77006765745F426F6479007365745F426F647900626F647900537472696E6744696374696F6E617279006F705F457175616C697479006F705F496E657175616C697479007365745F5072696F72697479004D61696C5072696F726974790073656E73697469766974790049734E756C6C4F72456D7074790000002F63006F006E007400650078007400200063006F006E006E0065006300740069006F006E003D007400720075006500008157530045004C00450043005400200070002E006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007000720069006E0063006900700061006C00700072006F00660069006C0065005D002000410053002000700070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A004F004E002000700070002E00700072006F00660069006C0065005F006900640020003D00200070002E00700072006F00660069006C0065005F00690064000D000A00570048004500520045002000700070002E00690073005F00640065006600610075006C00740020003D0020003100006F700072006F00660069006C0065005F006E0061006D00650020006E006F0074002000730070006500630069006600690065006400200061006E00640020006E006F002000640065006600610075006C0074002000700072006F00660069006C006500200066006F0075006E0064000083EF530045004C00450043005400200054004F00500020003100200061002E0065006D00610069006C005F0061006400640072006500730073002C00200061002E007200650070006C00790074006F005F0061006400640072006500730073002C00200073002E007300650072007600650072006E0061006D0065002C00200073002E0070006F00720074002C00200073002E0065006E00610062006C0065005F00730073006C002C00200073002E007500730065005F00640065006600610075006C0074005F00630072006500640065006E007400690061006C0073002C00200073002E0075007300650072006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065006100630063006F0075006E0074005D002000410053002000700061000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D002000700061002E00700072006F00660069006C0065005F00690064000D000A0041004E0044002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020003E003D00200040005300650071000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F006100630063006F0075006E0074005D00200041005300200061000D000A004F004E002000700061002E006100630063006F0075006E0074005F006900640020003D00200061002E006100630063006F0075006E0074005F00690064000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007300650072007600650072005D00200041005300200073000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D00200073002E006100630063006F0075006E0074005F00690064000D000A0057004800450052004500200070002E006E0061006D00650020003D0020004000500072006F00660069006C0065000D000A004F0052004400450052002000420059002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020004100530043000009400053006500710000114000500072006F00660069006C0065000039700072006F00660069006C0065005F006E0061006D006500200027007B0030007D00270020006E006F007400200066006F0075006E0064000125530051004C00200053006500720076006500720020004D0065006500740069006E0067000009540045005800540000255300630068006500640075006C0065002000610020004D0065006500740069006E006700000D4E006F0072006D0061006C00000D5000750062006C006900630000136C006F00630061006C0068006F00730074000001001F5200450051002D005000410052005400490043004900500041004E005400011F4F00500054002D005000410052005400490043004900500041004E005400011F4E004F004E002D005000410052005400490043004900500041004E005400010F5200450051005500450053005400000D430041004E00430045004C0000594D0069007300730069006E0067002000730065006E006400650072003A00200050006C0065006100730065002000730070006500630069006600790020004000660072006F006D005F0061006400640072006500730073000080C34D0069007300730069006E006700200072006500630069007000690065006E00740073003A00200050006C0065006100730065002000730070006500630069006600790020006500690074006800650072002000400072006500630069007000690065006E00740073002C002000400063006F00700079005F0072006500630069007000690065006E007400730020006F0072002000400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073000009480054004D004C00006B400062006F00640079005F0066006F0072006D006100740020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A00200054004500580054002C002000480054004D004C00005340006D006500740068006F00640020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B730065006E007300690074006900760069007400790020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B400069006D0070006F007200740061006E006300650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D000065400072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006F400063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00007B400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006155006E00610062006C006500200074006F002000730065006E00640020006D00610069006C002000640075006500200074006F002000760061006C00690064006100740069006F006E0020006500720072006F0072002800730029003A002000003755006E00610062006C006500200074006F002000610074007400610063006800200027007B0030007D0027003A0020007B0031007D0001354000660072006F006D005F006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002D40007200650070006C0079005F0074006F00200069007300200069006E00760061006C00690064003A0020000031400072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000003B400063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A0020000047400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000001F42004500470049004E003A005600430041004C0045004E00440041005200001B500052004F004400490044003A002D002F002F007B0030007D000117560045005200530049004F004E003A0032002E00300000154D004500540048004F0044003A007B0030007D000019530045005100550045004E00430045003A007B0030007D00001942004500470049004E003A0056004500560045004E005400003944005400530054004100520054003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D000039440054005300540041004D0050003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000354400540045004E0044003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000154C004F0043004100540049004F004E003A002000000F5500490044003A007B0030007D00001F4400450053004300520049005000540049004F004E003A007B0030007D00004158002D0041004C0054002D0044004500530043003B0046004D00540054005900500045003D0074006500780074002F00680074006D006C003A007B0030007D000117530055004D004D004100520059003A007B0030007D0000294F005200470041004E0049005A00450052003A004D00410049004C0054004F003A007B0030007D00001343004C004100530053003A007B0030007D0000155000520049004F0052004900540059003A00350000155000520049004F0052004900540059003A00390000155000520049004F0052004900540059003A0031000039500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C0053004500003F500041005200540053005400410054003D004E0045004500440053002D0041004300540049004F004E003B0052005300560050003D00540052005500450001809541005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D007B0033007D003B007B0032007D003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D000180DF41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D004E004F004E002D005000410052005400490043004900500041004E0054003B00500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C00530045003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D00011942004500470049004E003A00560041004C00410052004D00001F54005200490047004700450052003A002D00500054007B0030007D004D00011D41004300540049004F004E003A0044004900530050004C004100590000294400450053004300520049005000540049004F004E003A00520065006D0069006E00640065007200001545004E0044003A00560041004C00410052004D00001545004E0044003A0056004500560045004E005400001B45004E0044003A005600430041004C0045004E00440041005200001B74006500780074002F00630061006C0065006E00640061007200000D6D006500740068006F00640000096E0061006D00650000174D0065006500740069006E0067002E00690063007300001374006500780074002F00680074006D006C00001B43006F006E00740065006E0074002D0063006C006100730073000147750072006E003A0063006F006E00740065006E0074002D0063006C00610073007300650073003A00630061006C0065006E006400610072006D00650073007300610067006500014353004D0054005000200043006C00690065006E007400200043006F006E00660069006700750072006100740069006F006E0020004500720072006F0072003A00200000414D00610069006C002000530065006E0074002E0020004500760065006E00740020004900640065006E007400690066006900650072003A0020007B0030007D0000294500720072006F0072002000730065006E00640069006E00670020006D00610069006C003A002000000B4300480041004900520000000072171058F16DF140AEC155837BD52AFA00042001010803200001052001011111042001010E80A00766125111551259110C1110020202125D12590E021261021265126902126D02126D02020202020202114D0202020202117102020202020202020202020202020202020211750202020202021D0E080E0202020202020202021D0E080E12791279021279127902127902127902115515127D011280811280810215127D011280811280810215127D011280811280810202021280851280891280891279021279050000128095032000020420001269042000126D0520011141080520001280A90720021280B10E1C0320000E0500020E0E1C052001114908052001114D08050001114D02040001020E05000111410E040000117106000111451171042000117105200111710D050001114908052002010E0E050002020E0E040000117505200112590E09100103020E02101E00040A01110C0800011280B91180BD0700011D0E1280B90600030E0E1C1C040A011110040A011155032000080500020E1C1C05200101115504200101020620011D0E1D030520001280C508151280CD011280C9052001011300062001011280810500020E0E0E0520001280D10520020E030305200012808108151280CD0112808108200015127D0113000715127D0112808104200013000600020E0E1D1C05000102114D080002114D114D114D0520010112510520001280D90900021280890E1280850520001280DD08151280CD011280890520001280E105200101125D060001114D114D0500001280E908B77A5C561934E0890400000000040100000004020000000403000000040400000004050000000406000000040700000003061D0E0206080306110C03061110460021011141114111411141114111411141114111411141114111411141114511451145114111491141114D1149114D11411141114111411149114D114D11411141114D101141030000010801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000701000000001001000B73716C5F636C725F69637300002F01002A53656E64204943532063616C656E64617220696E7669746573207573696E672053514C2053657276657200000501000000001101000C456974616E20426C756D696E00000C010007312E302E302E3000000A010005656E2D55530000000000000085AEE65C00000000020000001C010000045B0000043D000052534453FE40FD10CEC2EC4288BE81BCCB03616601000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C6F626A5C44656275675C73716C5F636C725F6963732E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000485C00000000000000000000625C0000002000000000000000000000000000000000000000000000545C0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000A80300000000000000000000A80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00408030000010053007400720069006E006700460069006C00650049006E0066006F000000E402000001003000300030003000300034006200300000006E002B00010043006F006D006D0065006E00740073000000530065006E00640020004900430053002000630061006C0065006E00640061007200200069006E007600690074006500730020007500730069006E0067002000530051004C002000530065007200760065007200000000003A000D00010043006F006D00700061006E0079004E0061006D0065000000000045006900740061006E00200042006C0075006D0069006E000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000730071006C005F0063006C0072005F006900630073000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E003000000040001000010049006E007400650072006E0061006C004E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C0000003E000D0001004C006500670061006C0043006F007000790072006900670068007400000045006900740061006E00200042006C0075006D0069006E000000000042000D0001004C006500670061006C00540072006100640065006D00610072006B0073000000000045006900740061006E00200042006C0075006D0069006E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C00000038000C000100500072006F0064007500630074004E0061006D00650000000000730071006C005F0063006C0072005F006900630073000000340008000100500072006F006400750063007400560065007200730069006F006E00000031002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E0030002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000C000000743C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01030008AFE65C0000000000000000E00022200B013000003E00000008000000000000825C000000200000006000000000001000200000000200000400000000000000060000000000000000A000000002000000000000030060850000100000100000000010000010000000000000100000000000000000000000305C00004F000000006000000404000000000000000000000000000000000000008000000C000000F85A00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000883C000000200000003E000000020000000000000000000000000000200000602E7273726300000004040000006000000006000000400000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000004600000000000000000000000000004000004200000000000000000000000000000000645C0000000000004800000002000500883200007028000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B300600B71000000100001100280E00000A0A0F04280F00000A2D1E0F1D280F00000A2C090F1C281000000A2D0C0F00280F00000A16FE012B0117130D110D39F5010000007201000070731100000A130E110E6F1200000A130F110E6F1300000A000F00280F00000A131011102C6900110F72310000706F1400000A00110F6F1500000A13110011116F1600000A16FE01131211122C1C0011116F1700000A00110E6F1800000A00728A010070731900000A7A001111166F1A00000A10000011116F1700000A0000DE0D11112C0811116F1B00000A00DC00110F72FA0100706F1400000A00110F6F1C00000A72EB050070178C2B0000016F1D00000A26110F6F1C00000A72F50500700F00281E00000A6F1D00000A26110F6F1500000A13130011136F1600000A16FE01131411142C280011136F1700000A00110E6F1800000A0072070600700F00281E00000A281F00000A731900000A7A000F04280F00000A131511152C0A1113166F1A00000A10040F05280F00000A131611162C0A1113176F1A00000A10050F19280F00000A131711172C0A1113186F1A00000A10190F1A282000000A131811182C0A1113196F2100000A101A0F1B281000000A131911192C0A11131A6F2200000A101B0F1C281000000A131A111A2C1811131B6F2200000A131B121B282300000A282400000A101C0F1D280F00000A2C0C0F1C282300000A16FE012B0116131C111C2C0A11131C6F1A00000A101D0011136F1700000A0000DE0D11132C0811136F1B00000A00DC110E6F1800000A00000F06280F00000A2D0E0F06281E00000A282500000A2B0117131D111D2C0C7241060070282600000A10060F08280F00000A2D0E0F08281E00000A282500000A2B0117131E111E2C0C7267060070282600000A10080F0F282700000A131F111F2C0C282800000A282900000A100F0F0D282700000A132011202C200F0F282A00000A13211221230000000000C07240282B00000A282900000A100D0F0E282700000A132211222C200F0D282A00000A13211221230000000000004E40282B00000A282900000A100E0F14282000000A132311232C091F0F282C00000A10140F13281000000A132411242C0817282400000A10130F1F281000000A132511252C0816282400000A101F0F12280F00000A2D0E0F12281E00000A282500000A2B0117132611262C0C7271060070282600000A10120F09280F00000A2D0E0F09281E00000A282500000A2B0117132711272C0C7297060070282600000A10090F0A280F00000A2D0E0F0A281E00000A282500000A2B0117132811282C0C72A5060070282600000A100A0F19280F00000A2D0E0F19281E00000A282500000A2B0117132911292C0C72B3060070282600000A10190F1A282000000A132A112A2C091F19282C00000A101A0F1B281000000A132B112B2C0816282400000A101B0F1D280F00000A2D0E0F1D281E00000A282500000A2B0117132C112C2C0C0017282400000A101C002B40000F1E280F00000A2D0E0F1E281E00000A282500000A2B0117132D112D2C0C72C7060070282600000A101E0F1D281E00000A0F1E281E00000A732D00000A0A000F16280F00000A132E112E2C0C72C9060070282600000A10160F17280F00000A132F112F2C0C72E9060070282600000A10170F18280F00000A133011302C0C7209070070282600000A10180F10280F00000A133111312C0C7229070070282600000A10100F11282000000A133211322C1E0F10281E00000A7239070070282E00000A2D03162B0117282C00000A10110E20280F00000A133311332C200E20282F00000A13341234FE161D0000016F3000000A282600000A8110000001733100000A0C0F04280F00000A2D0E0F04281E00000A282500000A2B0117133511352C0C0872470700706F3200000A260F01280F00000A2D0E0F01281E00000A282500000A2C310F02280F00000A2D0E0F02281E00000A282500000A2C1A0F03280F00000A2D0E0F03281E00000A282500000A2B01172B0116133611362C0C0872A10700706F3200000A260F08281E00000A7266080070283300000A2C130F08281E00000A7267060070283300000A2B0116133711372C180872700800700F08281E00000A281F00000A6F3200000A260F10281E00000A171203280100002B16FE01133811382C310872DC0800700F10281E00000AD003000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F0A281E00000A171204280200002B16FE01133911392C310872300900700F0A281E00000AD004000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F09281E00000A171201280300002B16FE01133A113A2C3108728C0900700F09281E00000AD015000001283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A26161305161306161307007E01000004133B16133C388F000000113B113C9A133D000F01280F00000A2D10113D0F16281E00000A282E00000A2B0116133E113E2C0500171305000F02280F00000A2D10113D0F17281E00000A282E00000A2B0116133F113F2C0500171306000F03280F00000A2D10113D0F18281E00000A282E00000A2B0116134011402C050017130700110511065F11075F134111412C03002B1200113C1758133C113C113B8E693F66FFFFFF0F01280F00000A2D07110516FE012B0116134211422C220872E80900700F16281E00000A7E010000046F3000000A283800000A6F3200000A260F02280F00000A2D07110616FE012B0116134311432C2208724E0A00700F17281E00000A7E010000046F3000000A283800000A6F3200000A260F03280F00000A2D07110716FE012B0116134411442C220872BE0A00700F18281E00000A7E010000046F3000000A283800000A6F3200000A26086F3900000A16FE02134511452C11723A0B007008283A00000A731900000A7A733B00000A130811080F06281E00000A6F3C00000A0011080F07281E00000A6F3D00000A001108076F3E00000A0011080F08281E00000A7266080070282E00000A6F3F00000A000F0B280F00000A16FE01134611462C6C00000F0B281E00000A178D3000000125161F3B9D6F4000000A13471613482B43114711489A1349000011086F4100000A1149734200000A6F4300000A0000DE1C134A00729C0B00701149114A6F4400000A283800000A731900000A7A00114817581348114811478E6932B500000011080F04281E00000A734500000A6F4600000A0000DE1A134B0072D40B0070114B6F4400000A284700000A731900000A7A00000F05280F00000A2D110F05281E00000A282500000A16FE012B0116134C114C2C1D11086F4800000A0F05281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134D00720A0C0070114D6F4400000A284700000A731900000A7A000011086F4B00000A0F01281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134E0072380C0070114E6F4400000A284700000A731900000A7A00000F02280F00000A2D110F02281E00000A282500000A16FE012B0116134F114F2C1D11086F4C00000A0F02281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A135000726A0C007011506F4400000A284700000A731900000A7A00000F03280F00000A2D110F03281E00000A282500000A16FE012B0116135111512C1D11086F4D00000A0F03281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A13520072A60C007011526F4400000A284700000A731900000A7A733100000A1309110972EE0C00706F3200000A261109720E0D00700F12281E00000A281F00000A6F3200000A261109722A0D00706F3200000A26110972420D00700F10281E00000A6F3700000A281F00000A6F3200000A26110972580D00700F11284E00000A8C2B000001281F00000A6F3200000A26110972720D00706F3200000A261109728C0D00700F0D282A00000A8C1C000001281F00000A6F3200000A26110972C60D00700F0F282A00000A8C1C000001281F00000A6F3200000A26110972000E00700F0E282A00000A8C1C000001281F00000A6F3200000A260F0C280F00000A16FE01135311532C19110972360E00700F0C281E00000A284700000A6F3200000A261109724C0E00700E20281E00000A281F00000A6F3200000A261109725C0E007011086F4F00000A281F00000A6F3200000A261109727C0E007011086F4F00000A281F00000A6F3200000A26110972BE0E007011086F5000000A281F00000A6F3200000A26110972D60E007011086F5100000A6F5200000A281F00000A6F3200000A26110972000F00700F0A281E00000A6F3700000A281F00000A6F3200000A26071354115445030000000200000011000000200000002B2D110972140F00706F3200000A262B201109722A0F00706F3200000A262B11110972400F00706F3200000A262B022B000F15282300000A2D0772560F00702B0572900F0070130A16130B0011086F4B00000A6F5300000A13552B6C11556F5400000A13560011566F5200000A11086F5100000A6F5200000A282E00000A135711572C0317130B110972D00F00701A8D0E000001251611566F5500000AA2251711566F5200000AA22518110AA225190F16281E00000A6F3700000AA2285600000A6F3200000A260011556F5700000A2D8BDE0D11552C0811556F1B00000A00DC0011086F4C00000A6F5300000A13582B6C11586F5400000A13590011596F5200000A11086F5100000A6F5200000A282E00000A135A115A2C0317130B110972D00F00701A8D0E000001251611596F5500000AA2251711596F5200000AA22518110AA225190F17281E00000A6F3700000AA2285600000A6F3200000A260011586F5700000A2D8BDE0D11582C0811586F1B00000A00DC0011086F4D00000A6F5300000A135B2B6C115B6F5400000A135C00115C6F5200000A11086F5100000A6F5200000A282E00000A135D115D2C0317130B110972D00F00701A8D0E0000012516115C6F5500000AA22517115C6F5200000AA22518110AA225190F18281E00000A6F3700000AA2285600000A6F3200000A2600115B6F5700000A2D8BDE0D115B2C08115B6F1B00000A00DC110B16FE01135E115E2C400011086F4D00000A11086F5100000A6F5800000A001109726710007011086F5100000A6F5500000A11086F5100000A6F5200000A283800000A6F3200000A26000E13131B111B285900000A2D1F111B0F10281E00000A7239070070283300000A282400000A285A00000A2B02111B285B00000A135F115F2C5400110972481100706F3200000A26110972621100700F14284E00000A8C2B000001281F00000A6F3200000A26110972821100706F3200000A26110972A01100706F3200000A26110972CA1100706F3200000A2600110972E01100706F3200000A26110972F61100706F3200000A26735C00000A130C00110C0F19281E00000A6F5D00000A00110C0F1A284E00000A6F5E00000A00110C0F1C282300000A6F5F00000A00110C0F1B282300000A6F6000000A00110C066F6100000A007212120070736200000A136011606F6300000A722E1200700F10281E00000A6F3700000A6F6400000A0011606F6300000A723C12007072461200706F6400000A000F07281E00000A725E120070736200000A286500000A136111086F6600000A11616F6700000A0011096F3000000A1160286500000A136211086F6600000A11626F6700000A0011086F6800000A7272120070728E1200706F6900000A0000DE1A13630072D612007011636F4400000A284700000A731900000A7A0000110C11086F6A00000A000E1F286B00000A285B00000A136411642C1C286C00000A721A1300700E20281E00000A281F00000A6F6D00000A0000DE1A136500725C13007011656F4400000A284700000A731900000A7A2A00413C0100020000007A00000044000000BE0000000D00000000000000020000001301000004010000170200000D0000000000000000000000D508000018000000ED0800001C0000001E000001000000001A09000018000000320900001A0000001E000001000000004D090000420000008F0900001A0000001E00000100000000AA09000021000000CB0900001A0000001E00000100000000E609000042000000280A00001A0000001E00000100000000430A000042000000850A00001A0000001E00000102000000B50C0000790000002E0D00000D00000000000000020000004A0D000079000000C30D00000D0000000000000002000000DF0D000079000000580E00000D00000000000000000000005E0F0000E7000000451000001A0000001E00000100000000601000003C0000009C1000001A0000001E0000012202286E00000A002AB21A8D2D000001251672C9060070A2251772E9060070A225187209070070A225197286130070A280010000042A000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000CC060000237E000038070000380A000023537472696E67730000000070110000941300002355530004250000100000002347554944000000142500005C03000023426C6F620000000000000002000001571D0208090A000000FA013300160000010000003A000000040000000E00000003000000210000006E0000000B0000000D0000000100000004000000010000000300000002000000030000000000AD0401000000000006008303DB060600F003DB060600CE02BC060F000C0700000600E2022A05060066032A05060047032A050600D7032A050600A3032A050600BC032A0506000F032A0506002A032A050600AC02FB060600B408F0040A00F9026E060A00300445070A00440245070A001F0045070A00110545070E006509DB080E00100A9D0406002D0681090E0097019D040E000E099D040A00B705F8080A004F01F8080A001106F80806004702F00406002401F0040600C505F00406000E00B1000E002B089D040E006C0234020E00A8099D0406000905F0040E00A301DB080E006C04DB080A00AA05CF050A003701CF050A000406CF050600B301F0040A005005F80806002200F0040A006106F80806005A04F00406007302F0040600BF01F0040600FF05F0040E007D059D040E0019099D04060001007E040E0067059D0406008906E7070E00D809FA000E0092059D040E003C05FA000A009D096E060A0064026E060000000028000000000001000100010010005A07000039000100010003010000CF0600008D000200040003010000150800008D000B000400110032075F0206068C00630256805300660256807E00660256808600660256806800660256803F00660256804B00660256807600660256806F00660206068C006302568038006A02568043006A0256805B006A02502000000000960098026E0201005032000000008618A306060022005932000000009118A906B5022200000001000E02000002004F08000003004A0800000400440800000500370800000600E90500000700D30800000800D30900000900A80800000A00770100000B001D0A00000C006A0800000D00210500000E00D90000000F00CC0000001000E800000011005F01000012008201000013001901000014003B0600001500760700001600F20500001700EE0100001800E90100001900E30100001A00240200001B00470900001C00E50400001D00CF0700001E001B0200001F006601000020001B070000210048060900A30601001100A30606001900A3060A002900A30610003100A30610003900A30610004100A30610004900A30610005100A30610005900A30610006100A30610006900A30610007900A306060021019707B7008100BD04BD009900BD04BD00C900A3061000C9004101C10031011C05060039018D091000D1001F06C60041018E08BD00410181020600310181020600F100A3061000D9002D04CB00490187020600D1000608D10051011804D70081000E04DF006901A108E3009100BD04BD00D9001C00E900D9000E05EF0099000E04BD009900E608F5006901290AFB008100E60800018900BD04BD00E100B60906018900E6080B0189000E041201E1006B0717019100E6081D012901A30623016901E9092901E90021012F0171005804DF00B100A3060600B100500234016901F509290119018F023A017101D101490119013C07520169015906DF006901A1085A01B10061046B0169019A086F01B900A3060600B900C7081000B900CA091000B900030A7501B900C8047B016901F2088001B9005A0887019101A30610000C00F6009601F1008B01DF000101A3061000B90000059C0169019A08A301B9004C09A90169016F01AF01A101F6001000B900E205A901B9003100A901B900A900A90191000E046B01B900C109DF00B900BB08DF00B900F704B50101011F08DF0014009506C4011C002409D5010101FE01DF006901A108DA01A9017809BD001400F600960199007802E10199002901E70199002504E101C100A3060600C1005C091000C1003E090100C100B5077B01C100D7047B01C1008707F0010901A306100009010608F601B101F600230111013A04FC01B9007B0806022400F6009601B900FA071502C101F6002301C1005A011B02990030092102C9015B022802D1015A0110007100A306060008000C003702080010003C0208001400410208001800460208001C004B02080020005002080024005502080028005A02080030003702080034003C0208003800410220006B003C022E000B00B9022E001300C2022E001B00E1022E002300EA022E002B00FB022E0033002B032E003B0031032E004300EA022E004B0031032E00530031032E005B0043032E006300500315008D01BB01CD010C02048000000100000000000000000000000000B00600000400000000000000000000002E02A000000000000400000000000000000000002E029400000000000400000000000000000000002E02F004000000000300020004000200690044016900610169006601000000436F6C6C656374696F6E60310049456E756D657261746F7260310047657453716C496E743332003C4D6F64756C653E006765745F4343005055424C49430041444400505249564154450052454652455348005055424C49534800434F4E464944454E5449414C0043414E43454C004445434C494E45434F554E5445520052455155455354005245504C590076616C75655F5F0053797374656D2E44617461006D73636F726C6962006765745F4263630053797374656D2E436F6C6C656374696F6E732E47656E6572696300656E645F74696D655F7574630073746172745F74696D655F7574630074696D657374616D705F757463004164640053797374656D2E436F6C6C656374696F6E732E5370656369616C697A65640070726F645F6964004E657747756964006F705F42697477697365416E64004462436F6D6D616E6400437265617465436F6D6D616E640053716C436F6D6D616E640053656E64006D6574686F640070617373776F7264005265706C61636500696D706F7274616E63650073657175656E6365006765745F4D657373616765004D61696C4D6573736167650043726564656E7469616C43616368650049446973706F7361626C650052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500626C696E645F636F70795F726563697069656E74735F726F6C65006765745F446973706C61794E616D650070726F66696C655F6E616D6500757365726E616D6500736D74705F7365727665726E616D650053797374656D2E4E65742E4D696D650053716C4461746554696D6500417070656E644C696E65006765745F506970650053716C5069706500436F6E74656E7454797065006F705F46616C736500436C6F736500446973706F736500547279506172736500636C725F73656E645F6963735F696E76697465004E65757472616C5265736F75726365734C616E67756167654174747269627574650044656275676761626C6541747472696275746500417373656D626C795469746C654174747269627574650053716C50726F63656475726541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F56616C7565004164645769746856616C7565006F705F547275650047657453716C537472696E6700437265617465416C7465726E6174655669657746726F6D537472696E6700546F537472696E67006765745F4C656E677468004E6574776F726B43726564656E7469616C0053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C0053797374656D2E4E65742E4D61696C0073716C5F636C725F6963732E646C6C006765745F49734E756C6C007365745F4973426F647948746D6C007365745F456E61626C6553736C00656E61626C655F73736C0053797374656D006765745F46726F6D007365745F46726F6D00456E756D0047657453716C426F6F6C65616E004F70656E006C6F636174696F6E0053797374656D2E5265666C656374696F6E004E616D6556616C7565436F6C6C656374696F6E0053716C506172616D65746572436F6C6C656374696F6E004D61696C41646472657373436F6C6C656374696F6E004174746163686D656E74436F6C6C656374696F6E00416C7465726E61746556696577436F6C6C656374696F6E004462436F6E6E656374696F6E0053716C436F6E6E656374696F6E00457863657074696F6E0053797374656D2E446174612E436F6D6D6F6E006765745F546F007265706C795F746F00726571756972655F727376700043686172004462446174615265616465720053716C44617461526561646572004578656375746552656164657200537472696E674275696C646572007573655F72656D696E646572006576656E745F6964656E74696669657200546F55707065720053716C506172616D65746572004D6963726F736F66742E53716C5365727665722E5365727665720049456E756D657261746F7200476574456E756D657261746F72002E63746F72002E6363746F720073716C5F636C725F6963730053797374656D2E446961676E6F7374696373006943616C4D6574686F64730053797374656D2E52756E74696D652E436F6D70696C657253657276696365730053797374656D2E5265736F757263657300446562756767696E674D6F6465730073757070726573735F696E666F5F6D65737361676573006943616C526F6C6573004765744E616D65730053797374656D2E446174612E53716C54797065730053746F72656450726F63656475726573004164644D696E757465730072656D696E6465725F6D696E75746573007365745F43726564656E7469616C73006765745F44656661756C744E6574776F726B43726564656E7469616C73007365745F55736544656661756C7443726564656E7469616C73007573655F64656661756C745F63726564656E7469616C730053797374656D2E436F6C6C656374696F6E73006765745F48656164657273006765745F506172616D6574657273006943616C436C617373006765745F41646472657373004D61696C416464726573730066726F6D5F6164647265737300626C696E645F636F70795F726563697069656E7473006765745F4174746163686D656E74730066696C655F6174746163686D656E7473006765745F416C7465726E6174655669657773006765745F486173526F777300436F6E63617400466F726D617400626F64795F666F726D6174004F626A656374006765745F5375626A656374007365745F5375626A656374007375626A6563740053797374656D2E4E6574006F705F496D706C696369740053706C69740053797374656D2E446174612E53716C436C69656E7400536D7470436C69656E74004174746163686D656E74006765745F43757272656E74006F705F4C6F676963616C4E6F74007365745F506F727400706F7274006765745F5265706C79546F4C697374007365745F486F7374004943726564656E7469616C734279486F7374004D6F76654E6578740053797374656D2E54657874007365745F436F6D6D616E64546578740053716C436F6E7465787400416C7465726E61746556696577006765745F5574634E6F77006765745F426F6479007365745F426F647900626F647900537472696E6744696374696F6E617279006F705F457175616C697479006F705F496E657175616C697479007365745F5072696F72697479004D61696C5072696F726974790073656E73697469766974790049734E756C6C4F72456D7074790000002F63006F006E007400650078007400200063006F006E006E0065006300740069006F006E003D007400720075006500008157530045004C00450043005400200070002E006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007000720069006E0063006900700061006C00700072006F00660069006C0065005D002000410053002000700070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A004F004E002000700070002E00700072006F00660069006C0065005F006900640020003D00200070002E00700072006F00660069006C0065005F00690064000D000A00570048004500520045002000700070002E00690073005F00640065006600610075006C00740020003D0020003100006F700072006F00660069006C0065005F006E0061006D00650020006E006F0074002000730070006500630069006600690065006400200061006E00640020006E006F002000640065006600610075006C0074002000700072006F00660069006C006500200066006F0075006E0064000083EF530045004C00450043005400200054004F00500020003100200061002E0065006D00610069006C005F0061006400640072006500730073002C00200061002E007200650070006C00790074006F005F0061006400640072006500730073002C00200073002E007300650072007600650072006E0061006D0065002C00200073002E0070006F00720074002C00200073002E0065006E00610062006C0065005F00730073006C002C00200073002E007500730065005F00640065006600610075006C0074005F00630072006500640065006E007400690061006C0073002C00200073002E0075007300650072006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065006100630063006F0075006E0074005D002000410053002000700061000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D002000700061002E00700072006F00660069006C0065005F00690064000D000A0041004E0044002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020003E003D00200040005300650071000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F006100630063006F0075006E0074005D00200041005300200061000D000A004F004E002000700061002E006100630063006F0075006E0074005F006900640020003D00200061002E006100630063006F0075006E0074005F00690064000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007300650072007600650072005D00200041005300200073000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D00200073002E006100630063006F0075006E0074005F00690064000D000A0057004800450052004500200070002E006E0061006D00650020003D0020004000500072006F00660069006C0065000D000A004F0052004400450052002000420059002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020004100530043000009400053006500710000114000500072006F00660069006C0065000039700072006F00660069006C0065005F006E0061006D006500200027007B0030007D00270020006E006F007400200066006F0075006E0064000125530051004C00200053006500720076006500720020004D0065006500740069006E0067000009540045005800540000255300630068006500640075006C0065002000610020004D0065006500740069006E006700000D4E006F0072006D0061006C00000D5000750062006C006900630000136C006F00630061006C0068006F00730074000001001F5200450051002D005000410052005400490043004900500041004E005400011F4F00500054002D005000410052005400490043004900500041004E005400011F4E004F004E002D005000410052005400490043004900500041004E005400010F5200450051005500450053005400000D430041004E00430045004C0000594D0069007300730069006E0067002000730065006E006400650072003A00200050006C0065006100730065002000730070006500630069006600790020004000660072006F006D005F0061006400640072006500730073000080C34D0069007300730069006E006700200072006500630069007000690065006E00740073003A00200050006C0065006100730065002000730070006500630069006600790020006500690074006800650072002000400072006500630069007000690065006E00740073002C002000400063006F00700079005F0072006500630069007000690065006E007400730020006F0072002000400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073000009480054004D004C00006B400062006F00640079005F0066006F0072006D006100740020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A00200054004500580054002C002000480054004D004C00005340006D006500740068006F00640020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B730065006E007300690074006900760069007400790020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B400069006D0070006F007200740061006E006300650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D000065400072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006F400063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00007B400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006155006E00610062006C006500200074006F002000730065006E00640020006D00610069006C002000640075006500200074006F002000760061006C00690064006100740069006F006E0020006500720072006F0072002800730029003A002000003755006E00610062006C006500200074006F002000610074007400610063006800200027007B0030007D0027003A0020007B0031007D0001354000660072006F006D005F006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002D40007200650070006C0079005F0074006F00200069007300200069006E00760061006C00690064003A0020000031400072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000003B400063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A0020000047400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000001F42004500470049004E003A005600430041004C0045004E00440041005200001B500052004F004400490044003A002D002F002F007B0030007D000117560045005200530049004F004E003A0032002E00300000154D004500540048004F0044003A007B0030007D000019530045005100550045004E00430045003A007B0030007D00001942004500470049004E003A0056004500560045004E005400003944005400530054004100520054003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D000039440054005300540041004D0050003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000354400540045004E0044003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000154C004F0043004100540049004F004E003A002000000F5500490044003A007B0030007D00001F4400450053004300520049005000540049004F004E003A007B0030007D00004158002D0041004C0054002D0044004500530043003B0046004D00540054005900500045003D0074006500780074002F00680074006D006C003A007B0030007D000117530055004D004D004100520059003A007B0030007D0000294F005200470041004E0049005A00450052003A004D00410049004C0054004F003A007B0030007D00001343004C004100530053003A007B0030007D0000155000520049004F0052004900540059003A00350000155000520049004F0052004900540059003A00390000155000520049004F0052004900540059003A0031000039500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C0053004500003F500041005200540053005400410054003D004E0045004500440053002D0041004300540049004F004E003B0052005300560050003D00540052005500450001809541005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D007B0033007D003B007B0032007D003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D000180DF41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D004E004F004E002D005000410052005400490043004900500041004E0054003B00500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C00530045003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D00011942004500470049004E003A00560041004C00410052004D00001F54005200490047004700450052003A002D00500054007B0030007D004D00011D41004300540049004F004E003A0044004900530050004C004100590000294400450053004300520049005000540049004F004E003A00520065006D0069006E00640065007200001545004E0044003A00560041004C00410052004D00001545004E0044003A0056004500560045004E005400001B45004E0044003A005600430041004C0045004E00440041005200001B74006500780074002F00630061006C0065006E00640061007200000D6D006500740068006F00640000096E0061006D00650000174D0065006500740069006E0067002E00690063007300001374006500780074002F00680074006D006C00001B43006F006E00740065006E0074002D0063006C006100730073000147750072006E003A0063006F006E00740065006E0074002D0063006C00610073007300650073003A00630061006C0065006E006400610072006D00650073007300610067006500014353004D0054005000200043006C00690065006E007400200043006F006E00660069006700750072006100740069006F006E0020004500720072006F0072003A00200000414D00610069006C002000530065006E0074002E0020004500760065006E00740020004900640065006E007400690066006900650072003A0020007B0030007D0000294500720072006F0072002000730065006E00640069006E00670020006D00610069006C003A002000000B43004800410049005200000000AB2C5809D2E6DD419991E3297036631400042001010803200001052001011111042001010E80A00766125111551259110C1110020202125D12590E021261021265126902126D02126D02020202020202114D0202020202117102020202020202020202020202020202020211750202020202021D0E080E0202020202020202021D0E080E12791279021279127902127902127902115515127D011280811280810215127D011280811280810215127D011280811280810202021280851280891280891279021279050000128095032000020420001269042000126D0520011141080520001280A90720021280B10E1C0320000E0500020E0E1C052001114908052001114D08050001114D02040001020E05000111410E040000117106000111451171042000117105200111710D050001114908052002010E0E050002020E0E040000117505200112590E09100103020E02101E00040A01110C0800011280B91180BD0700011D0E1280B90600030E0E1C1C040A011110040A011155032000080500020E1C1C05200101115504200101020620011D0E1D030520001280C508151280CD011280C9052001011300062001011280810500020E0E0E0520001280D10520020E030305200012808108151280CD0112808108200015127D0113000715127D0112808104200013000600020E0E1D1C05000102114D080002114D114D114D0520010112510520001280D90900021280890E1280850520001280DD08151280CD011280890520001280E105200101125D060001114D114D0500001280E908B77A5C561934E0890400000000040100000004020000000403000000040400000004050000000406000000040700000003061D0E0206080306110C03061110460021011141114111411141114111411141114111411141114111411141114511451145114111491141114D1149114D11411141114111411149114D114D11411141114D101141030000010801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000701000000001001000B73716C5F636C725F69637300002F01002A53656E64204943532063616C656E64617220696E7669746573207573696E672053514C2053657276657200000501000000001101000C456974616E20426C756D696E00000C010007312E302E302E3000000A010005656E2D55530000000000000008AFE65C00000000020000001C010000145B0000143D000052534453DB4BB0BA851E604CB6E8EA221D2B570601000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C6F626A5C44656275675C73716C5F636C725F6963732E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000585C00000000000000000000725C0000002000000000000000000000000000000000000000000000645C0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000A80300000000000000000000A80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00408030000010053007400720069006E006700460069006C00650049006E0066006F000000E402000001003000300030003000300034006200300000006E002B00010043006F006D006D0065006E00740073000000530065006E00640020004900430053002000630061006C0065006E00640061007200200069006E007600690074006500730020007500730069006E0067002000530051004C002000530065007200760065007200000000003A000D00010043006F006D00700061006E0079004E0061006D0065000000000045006900740061006E00200042006C0075006D0069006E000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000730071006C005F0063006C0072005F006900630073000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E003000000040001000010049006E007400650072006E0061006C004E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C0000003E000D0001004C006500670061006C0043006F007000790072006900670068007400000045006900740061006E00200042006C0075006D0069006E000000000042000D0001004C006500670061006C00540072006100640065006D00610072006B0073000000000045006900740061006E00200042006C0075006D0069006E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C00000038000C000100500072006F0064007500630074004E0061006D00650000000000730071006C005F0063006C0072005F006900630073000000340008000100500072006F006400750063007400560065007200730069006F006E00000031002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E0030002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000C000000843C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE; + GO ALTER ASSEMBLY [sql_clr_ics] DROP FILE ALL - ADD FILE FROM 0x4D6963726F736F667420432F432B2B204D534620372E30300D0A1A4453000000000200000200000023000000A80000000000000021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38000000FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA3101380000000010000000100000000000000E00FFFF04000000FFFF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA3101380000000010000000100000000000000F00FFFF04000000FFFF0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310185AEE65C01000000FE40FD10CEC2EC4288BE81BCCB03616600000000000000000100000001000000000000000000000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F862513FC607D311905300C04FA302A1C4454B99E9E6D211903F00C04FA302A10B9D865A1166D311BD2A0000F80849BDEC1618FF5EAA104D87F76F4963833460140000000000000009155D527A7BBD840934FA83C6AC3B979FA28AFD0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D310000000000000D3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEEFFEEF010000009600000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730000633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730004000000010000004B0000004C000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001BE23001800000000EED65127411D50101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000100000001000000000000004C000000280000001BE230019D8DCB725C000000010000004B0000004C000000650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003E002A11000000002008000000000000A7100000000000000000000001000006000000000100000000636C725F73656E645F6963735F696E76697465000000001600031104000000B8060000A710000000000000010000000A0024115553797374656D00120024115553797374656D2E54657874000000000E0024115553797374656D2E4E657400160024115553797374656D2E4E65742E4D61696C000000001A0024115553797374656D2E446174612E53716C54797065730000001A0024115553797374656D2E446174612E53716C436C69656E7400001E002411554D6963726F736F66742E53716C5365727665722E536572766572001E0020110000000001000011000000000000000063726564656E7469616C730022002011010000000100001100000000000000006D61696C5072696F72697479000000001E0020110200000001000011000000000000000073625F4572726F727300000026002011030000000100001100000000000000006D6574686F645F656E756D76616C7565000000002A0020110400000001000011000000000000000073656E73697469766974795F656E756D76616C75650000002A00201105000000010000110000000000000000726563697069656E745F726F6C655F666F756E64000000002E00201106000000010000110000000000000000636F70795F726563697069656E745F726F6C655F666F756E640000003200201107000000010000110000000000000000626C696E645F636F70795F726563697069656E745F726F6C655F666F756E640016002011080000000100001100000000000000006D7367001600201109000000010000110000000000000000737472001E0020110A000000010000110000000000000000727376705F737472696E67002A0020110B0000000100001100000000000000006F7267616E697A65725F696E5F726563697069656E7473001E0020110C000000010000110000000000000000736D7470636C69656E740000160003114400000090030000F50100003800000001000000160020110E000000010000110000000000000000636F6E00160020110F000000010000110000000000000000636D640016000311E0020000580300005A00000071000000010000001600201111000000010000110000000000000000726472000200060016000311E00200008C0300001A0100000A0100000100000016002011130000000100001100000000000000007264720002000600020006001600031144000000C803000089000000F1060000010000001A0020113D0000000100001100000000000000006974656D00000000020006001600031144000000300400003D000000BD0800000100000016002011490000000100001100000000000000006174740016000311CC0300002C0400001C000000DD08000001000000160020114A0000000100001100000000000000006500000002000600020006001600031144000000640400001A0000002209000001000000160020114B00000001000011000000000000000065000000020006001600031144000000980400001A0000007F09000001000000160020114D00000001000011000000000000000065000000020006001600031144000000CC0400001A000000BB09000001000000160020114E00000001000011000000000000000065000000020006001600031144000000000500001A000000180A000001000000160020115000000001000011000000000000000065000000020006001600031144000000340500001A000000750A0000010000001600201152000000010000110000000000000000650000000200060016000311440000006C0500006C000000A70C0000010000001A002011560000000100001100000000000000006164647200000000020006001600031144000000A40500006C0000003C0D0000010000001A002011590000000100001100000000000000006164647200000000020006001600031144000000DC0500006C000000D10D0000010000001A0020115C00000001000011000000000000000061646472000000000200060016000311440000004C060000E50000004E0F0000010000001A00201160000000010000110000000000000000636F6E74797065001A0020116100000001000011000000000000000048544D4C000000001A00201162000000010000110000000000000000617643616C000000020006001600031144000000800600001A0000003510000001000000160020116300000001000011000000000000000065000000020006001600031144000000B40600001A0000008C10000001000000160020116500000001000011000000000000000065000000020006000200060062010404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004020000040000000C00000001000700040600013401000001450180940194AA01980E0198FD019AAE019ADA019B0B01A16401A9BB01B02801B09F01B84A02810701819501820A02824D0183700283B301881E0288590289800289D2028A1C028A74028AB5028B0400028B73028C9F028D03028D65028DA900028E04028E5B028E98028ECF028F1B028F7F028FE00290460290B90290DE0291140291BA02926E0292B802930C02936E02939E0293EB000294D602956A02971D0297D70298C30299BE079B3F099B3F019B3F029B77029C09029CAA029D5D029E03029EC5029F9B02A08B02A21407A24A09A24A01A24A01A32101A44802A4DF01A56F01A64C02A6E101A77D02A81701A8C602AC5902AE7706B0CB01B0CB02B10806B22E01B22E02B26B06B39601B39602B3D402B50502B63101B9C501BAA101BB5501BC4102BD5101BDFA00020006002E002A110000000084080000000000002C000000000000000000000003000006A710000001000000002E6363746F72002E000404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004010000040100000C0000000100000602000600F2000000E81100000000000001000100A7100000000000007C010000DC11000000000000320000800100000035000080070000003C00008031000000EEEFFE80380000003D000080390000003E000080450000003F0000804E0000004000008056000000420000805F000000EEEFFE8063000000430000806400000044000084710000004A0000807A0000004B0000807B0000004C00008087000000EEEFFE808B0000004D0000808C0000004E000080940000004F0000809C00000050000080A700000052000080A800000053000080B200000054000080B300000055000080BB00000056000080BE000000EEEFFE80CA000000EEEFFE80CB00000057000080CC0000005900008AD900000065000080F1000000660000800A010000680000801301000069000080140100006A00008020010000EEEFFE80240100006B000080250100006C0000802D0100006D000080350100006E0000804C010000710000804D0100007200008056010000EEEFFE805A0100007200008064010000730000806D010000EEEFFE8071010000730000807B0100007400008084010000EEEFFE80880100007400008092010000750000809B010000EEEFFE809F01000075000080A901000076000080B2010000EEEFFE80B601000076000080C001000077000080C9010000EEEFFE80CD01000077000080E501000078000080FD010000EEEFFE8001020000780000800B020000790000800C0200007A000080140200007B00008017020000EEEFFE8023020000EEEFFE80240200007C0000802C0200007D0000802D0200008300008047020000EEEFFE804B02000083000080570200008400008071020000EEEFFE80750200008400008081020000850000808A020000EEEFFE808E020000850000809A02000086000080A3020000EEEFFE80A702000086000080C702000087000080D0020000EEEFFE80D402000087000080F402000088000080FD020000EEEFFE8001030000880000800A0300008900008013030000EEEFFE8017030000890000801F0300008A00008028030000EEEFFE802C0300008A000080340300008B0000804E030000EEEFFE80520300008B0000805E0300008C00008078030000EEEFFE807C0300008C000080880300008D000080A2030000EEEFFE80A60300008D000080B20300008F000080CC030000EEEFFE80D00300008F000080DC03000090000080E5030000EEEFFE80E903000090000080F203000091000080FB030000EEEFFE80FF03000091000080070400009300008021040000EEEFFE80250400009400008026040000950000802E04000096000080310400009800008032040000990000804C040000EEEFFE8050040000990000805C0400009A000080700400009B000080710400009D0000807A040000EEEFFE807E0400009D0000808A0400009E00008093040000EEEFFE80970400009E000080A30400009F000080AC040000EEEFFE80B00400009F000080BC040000A1000080C5040000EEEFFE80C9040000A1000080D5040000A2000080DE040000EEEFFE80E2040000A200008000050000A300008009050000EEEFFE800D050000A30000802D050000A900008033050000AB0000804D050000EEEFFE8051050000AB0000805D050000AC000084A8050000EEEFFE80AC050000B1000080B8050000B3000080E1050000EEEFFE80E5050000B3000080FD050000B400008011060000EEEFFE8015060000B400008046060000B50000805A060000EEEFFE805E060000B50000808F060000B6000080A3060000EEEFFE80A7060000B6000080D8060000B8000080DB060000B9000080DE060000BA000080E1060000BC000080E2060000BC000080EC060000EEEFFE80F1060000BC000080F8060000BD000080F9060000BE00008015070000EEEFFE8019070000BF0000801A070000C00000801D070000C10000801E070000C20000803A070000EEEFFE803E070000C30000803F070000C400008042070000C500008043070000C60000805F070000EEEFFE8063070000C700008064070000C800008067070000C900008068070000CA00008072070000EEEFFE8076070000CB00008077070000CC00008079070000CE0000807A070000EEEFFE8080070000BC0000808B070000D00000809E070000EEEFFE80A2070000D0000080C4070000D1000080D7070000EEEFFE80DB070000D1000080FD070000D200008010080000EEEFFE8014080000D200008036080000D400008041080000EEEFFE8045080000D400008056080000DA0000805D080000DB0000806C080000DC0000807B080000DD00008084080000DE0000808D080000E000008099080000EEEFFE809D080000E10000809E080000E20000809F080000E2000080BB080000EEEFFE80BD080000E2000080C4080000E3000080C5080000E5000080C6080000E6000080DA080000E7000080DD080000E8000080DF080000E9000080E0080000EA000080F9080000EC000080FA080000EEEFFE8000090000E200008008090000ED00008009090000EEEFFE800A090000F00000800B090000F10000801F090000F200008022090000F300008024090000F400008025090000F50000803C090000EEEFFE803D090000F90000803E090000FA0000805B090000EEEFFE805F090000FA0000807C090000FB0000807F090000FC00008081090000FD00008082090000FE00008099090000EEEFFE809A090000020100809B09000003010080B809000004010080BB09000005010080BD09000006010080BE09000007010080D5090000EEEFFE80D60900000B010080D70900000C010080F4090000EEEFFE80F80900000C010080150A00000D010080180A00000E0100801A0A00000F0100801B0A000010010080320A0000EEEFFE80330A000014010080340A000015010080510A0000EEEFFE80550A000015010080720A000016010080750A000017010080770A000018010080780A0000190100808F0A000020010080960A000021010080A30A000022010080BC0A000023010080C90A000024010080E70A000025010080050B000027010080120B000028010080300B0000290100804E0B00002A0100806C0B00002B010080780B0000EEEFFE807C0B00002B010080950B00002C010080AE0B00002D010080C70B00002E010080E00B00002F010080F90B000030010080170C000031010080350C000033010080380C0000EEEFFE804D0C0000360100805A0C0000370100805C0C000039010080690C00003A0100806B0C00003C010080780C00003D0100807A0C00003F0100807C0C000042010080930C000043010080960C000045010080970C000045010080A50C0000EEEFFE80A70C000045010080B00C000046010080B10C000047010080CB0C0000EEEFFE80CF0C000047010080D20C000048010080120D000049010080130D0000450100801E0D0000EEEFFE802A0D0000EEEFFE802B0D00004B0100802C0D00004B0100803A0D0000EEEFFE803C0D00004B010080450D00004C010080460D00004D010080600D0000EEEFFE80640D00004D010080670D00004E010080A70D00004F010080A80D00004B010080B30D0000EEEFFE80BF0D0000EEEFFE80C00D000051010080C10D000051010080CF0D0000EEEFFE80D10D000051010080DA0D000052010080DB0D000053010080F50D0000EEEFFE80F90D000053010080FC0D0000540100803C0E0000550100803D0E000051010080480E0000EEEFFE80540E0000EEEFFE80550E0000570100805C0E0000EEEFFE80600E000058010080610E000059010080750E00005A0100809F0E00005B010080A00E00005D010080D50E0000EEEFFE80D90E00005E010080DA0E00005F010080E70E000060010080050F000061010080120F0000620100801F0F0000630100802C0F0000640100802D0F0000660100803A0F000067010080470F00006D0100804E0F0000700100804F0F0000710100805E0F0000720100806D0F0000730100807C0F0000740100808B0F000075010080940F000076010080A00F000077010080BE0F000078010080D50F00007A010080ED0F00007B010080FC0F00007C0100800C1000007D0100801B1000007F01008032100000800100803510000081010080371000008201008038100000830100804F100000EEEFFE80501000008B010080511000008C0100805B1000008D01008069100000EEEFFE806D1000008E010080891000008F0100808C100000900100808E100000910100808F10000092010080A6100000960100800500060009005400090070000000000009000A000D004E000D0032000D0018000D002500000000000D000E0011001A0018003F00110012001500260000000000150016001900250019002500190068001500160019003C0015001600150021001100120000000000000000000D000E000D0022000D0034000D00490014003B000D000E00110022000000000011001200150021001500210015006C001100120015002D00000000002E00510015002900000000002A00490015003000000000003100570015002500000000002600400015002B00000000002C004E00150038000000000039006E0015004B00000000004C006B001100120011001D000D000E0000000000000000000D00190009000A0009004300000000004400630009004B00000000004C006100090022000000000023004300090023000000000024005A00090021000000000022005600090025000000000026003C0009002100000000002200360009002B00000000002C004B0009004300000000004400630009004900000000004A00600009004B00000000004C00630009005300000000005400720009001900000000001A00240009001F000000000020003300090045000000000009000A000D002C0009000A0009000A000D004900000000004A0058000D00510009000A0009002400000000002500490009002900000000002A00530009002F000000000030005F0009001B00000000001C002F0009001D00000000001E004C000900250000000000260053000900370009004D00000000004E00930009000D00000000000D00870009004800000000004900B90009005200000000005300EB0009005A00000000005B00FA0009004600000000004700E80009002B000900300009003600090010001E0027000000000012001A0009000A000D004500000000000D000E0011002D000D000E000D004F00000000000D000E00110032000D000E000D005B00000000000D000E00110038000D000E000D006600000000000D000E001100170009000A00000000001B001D0009003900000000003A00C10009004300000000004400D50009004F00000000005000ED0009002200000000002300770009002D000900250009001F000900250009001F00090026000000000009000A000D001400210042000000000016001D000D000E001100120015003E00110012001100240011001200150067000D000E00000000001E00200009000A000000000009000A000D003C0009000A0009001C0009000A000D004B000000000009000A000D004B00000000004C00820009000A0009001C0009000A000D0047000000000009000A000D003C0009000A0009001C0009000A000D0049000000000009000A000D005900000000005A008E0009000A0009001C0009000A000D004E000000000009000A000D006500000000006600A10009000A0009001C0009000A000D0054000900310009002B00090047000900270009004D00090047000900280009005D0009005C000900590009001E00000000001F004D0009004A00090044000900550009004300090051000900510009001E000000000011002E001100170011002E001100170011002E0011001700110017000900780009002E000900100026002C00000000001200220009000A000D00320000000000330052000D00C90009000A002300250000000000000000000900100026002C00000000001200220009000A000D00320000000000330052000D00CE0009000A002300250000000000000000000900100026002D00000000001200220009000A000D00320000000000330052000D00D40009000A00230025000000000000000000090026000000000009000A000D0023000D00C80009000A00090036000000000009000A000D002C000D0056000D002E000D0034000D002A0009000A0009002600090029000900320009000A000D0035000D002A000D004E000D0035000D0032000D0064000D0046000D003B000D0088000D002A000D0068000D002B000D00550009000A0009001C0009000A000D0052000000000009000A000D0022000D002900000000001100710009000A0009001C0009000A000D00450005000600F200000024000000A7100000010001002C000000000000000100000018000000000000001F00008005006E00F40000000800000001000000000000001000000000000000240000003C00000054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF120000000140200005500000001000000250000000100000001000000010000003D00000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C00000018000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200251100000000040000000100636C725F73656E645F6963735F696E7669746500000016002911000000000400000001003036303030303031000016002511000000002408000001002E6363746F7200000000160029110000000024080000010030363030303030330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF77093101010000000B00108E0C0084690D0006005C0000003C0000002C00000058000000000000000000000016000000190000000000EEC00000000000000000FFFF000000000000FFFFFFFF00000000FFFF0000000000000000000000000A0088080000000000002C1200000100000000000000000000000000000053746F72656450726F636564757265730043444135313336460000002DBA2EF10100000000000000A71000000000000000000000000000000000000001000000A71000002C00000000000000000000000000000000000000020002000D01000000000100FFFFFFFF00000000D31000000802000000000000FFFFFFFF00000000FFFFFFFF010001000000010000000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000000FEEFFEEF010000000100000000010000000000000000000000FFFFFFFFFFFFFFFFFFFF0900FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310185AEE65C01000000FE40FD10CEC2EC4288BE81BCCB036166770000002F4C696E6B496E666F002F6E616D6573002F7372632F686561646572626C6F636B002F7372632F66696C65732F633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000400000006000000010000001B00000000000000220000000800000011000000070000000A00000006000000000000000500000000000000DC513301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E00000020000000D3000000380000008B0100003800000000000000BA000000800000005C00000028000000C81A0000440200002C0000006C000000030000001F000000060000001E000000070000000A0000000B00000008000000090000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001D0000001C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 AS N'sql_clr_ics.pdb'; -GO -PRINT N'Creating [dbo].[clr_send_ics_invite]...'; + ADD FILE FROM 0x4D6963726F736F667420432F432B2B204D534620372E30300D0A1A4453000000000200000200000023000000A80000000000000021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38000000FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA3101380000000010000000100000000000000E00FFFF04000000FFFF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA3101380000000010000000100000000000000F00FFFF04000000FFFF0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310108AFE65C01000000DB4BB0BA851E604CB6E8EA221D2B570600000000000000000100000001000000000000000000000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F862513FC607D311905300C04FA302A1C4454B99E9E6D211903F00C04FA302A10B9D865A1166D311BD2A0000F80849BDEC1618FF5EAA104D87F76F49638334601400000000000000E9AEBC861E8A1BC62B30F76981069304B00CEECE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E310000000000000E3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEEFFEEF010000009600000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730000633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730004000000010000004B0000004C000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001BE2300180000000507340607411D50101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000100000001000000000000004C000000280000001BE23001C34C82495C000000010000004B0000004C000000650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003E002A11000000002008000000000000B7100000000000000000000001000006000000000100000000636C725F73656E645F6963735F696E76697465000000001600031104000000B8060000B710000000000000010000000A0024115553797374656D00120024115553797374656D2E54657874000000000E0024115553797374656D2E4E657400160024115553797374656D2E4E65742E4D61696C000000001A0024115553797374656D2E446174612E53716C54797065730000001A0024115553797374656D2E446174612E53716C436C69656E7400001E002411554D6963726F736F66742E53716C5365727665722E536572766572001E0020110000000001000011000000000000000063726564656E7469616C730022002011010000000100001100000000000000006D61696C5072696F72697479000000001E0020110200000001000011000000000000000073625F4572726F727300000026002011030000000100001100000000000000006D6574686F645F656E756D76616C7565000000002A0020110400000001000011000000000000000073656E73697469766974795F656E756D76616C75650000002A00201105000000010000110000000000000000726563697069656E745F726F6C655F666F756E64000000002E00201106000000010000110000000000000000636F70795F726563697069656E745F726F6C655F666F756E640000003200201107000000010000110000000000000000626C696E645F636F70795F726563697069656E745F726F6C655F666F756E640016002011080000000100001100000000000000006D7367001600201109000000010000110000000000000000737472001E0020110A000000010000110000000000000000727376705F737472696E67002A0020110B0000000100001100000000000000006F7267616E697A65725F696E5F726563697069656E7473001E0020110C000000010000110000000000000000736D7470636C69656E740000160003114400000090030000F50100003800000001000000160020110E000000010000110000000000000000636F6E00160020110F000000010000110000000000000000636D640016000311E0020000580300005A00000071000000010000001600201111000000010000110000000000000000726472000200060016000311E00200008C0300001A0100000A0100000100000016002011130000000100001100000000000000007264720002000600020006001600031144000000C803000089000000F1060000010000001A0020113D0000000100001100000000000000006974656D00000000020006001600031144000000300400003D000000CD0800000100000016002011490000000100001100000000000000006174740016000311CC0300002C0400001C000000ED08000001000000160020114A0000000100001100000000000000006500000002000600020006001600031144000000640400001A0000003209000001000000160020114B00000001000011000000000000000065000000020006001600031144000000980400001A0000008F09000001000000160020114D00000001000011000000000000000065000000020006001600031144000000CC0400001A000000CB09000001000000160020114E00000001000011000000000000000065000000020006001600031144000000000500001A000000280A000001000000160020115000000001000011000000000000000065000000020006001600031144000000340500001A000000850A0000010000001600201152000000010000110000000000000000650000000200060016000311440000006C0500006C000000B70C0000010000001A002011560000000100001100000000000000006164647200000000020006001600031144000000A40500006C0000004C0D0000010000001A002011590000000100001100000000000000006164647200000000020006001600031144000000DC0500006C000000E10D0000010000001A0020115C00000001000011000000000000000061646472000000000200060016000311440000004C060000E50000005E0F0000010000001A00201160000000010000110000000000000000636F6E74797065001A0020116100000001000011000000000000000048544D4C000000001A00201162000000010000110000000000000000617643616C000000020006001600031144000000800600001A0000004510000001000000160020116300000001000011000000000000000065000000020006001600031144000000B40600001A0000009C10000001000000160020116500000001000011000000000000000065000000020006000200060062010404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004020000040000000C00000001000700040600013401000001450180940194AA01980E0198FD019AAE019ADA019B0B01A16401A9D401B04101B0B801B86302810701819501820A02824D0183700283B301881E0288590289800289D2028A1C028A74028AB5028B0400028B73028C9F028D03028D65028DA900028E04028E5B028E98028ECF028F1B028F7F028FE00290460290B90290DE0291140291BA02926E0292B802930C02936E02939E0293EB000294D602956A02971D0297D70298C30299BE079B3F099B3F019B3F029B77029C09029CAA029D5D029E03029EC5029F9B02A08B02A22D07A26309A26301A26301A33A01A46102A4F801A58801A66502A6FA01A79602A83001A8DF02AC7202AE9006B0E401B0E402B12106B24701B24702B28406B3AF01B3AF02B3ED02B51E02B64A01B9DE01BABA01BB6E01BC5A02BD6A01BE1300020006002E002A110000000084080000000000002C000000000000000000000003000006B710000001000000002E6363746F72002E000404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004010000040100000C0000000100000602000600F2000000E81100000000000001000100B7100000000000007C010000DC11000000000000320000800100000035000080070000003C00008031000000EEEFFE80380000003D000080390000003E000080450000003F0000804E0000004000008056000000420000805F000000EEEFFE8063000000430000806400000044000084710000004A0000807A0000004B0000807B0000004C00008087000000EEEFFE808B0000004D0000808C0000004E000080940000004F0000809C00000050000080A700000052000080A800000053000080B200000054000080B300000055000080BB00000056000080BE000000EEEFFE80CA000000EEEFFE80CB00000057000080CC0000005900008AD900000065000080F1000000660000800A010000680000801301000069000080140100006A00008020010000EEEFFE80240100006B000080250100006C0000802D0100006D000080350100006E0000804C010000710000804D0100007200008056010000EEEFFE805A0100007200008064010000730000806D010000EEEFFE8071010000730000807B0100007400008084010000EEEFFE80880100007400008092010000750000809B010000EEEFFE809F01000075000080A901000076000080B2010000EEEFFE80B601000076000080C001000077000080C9010000EEEFFE80CD01000077000080E501000078000080FD010000EEEFFE8001020000780000800B020000790000800C0200007A000080140200007B00008017020000EEEFFE8023020000EEEFFE80240200007C0000802C0200007D0000802D0200008300008047020000EEEFFE804B02000083000080570200008400008071020000EEEFFE80750200008400008081020000850000808A020000EEEFFE808E020000850000809A02000086000080A3020000EEEFFE80A702000086000080C702000087000080D0020000EEEFFE80D402000087000080F402000088000080FD020000EEEFFE8001030000880000800A0300008900008013030000EEEFFE8017030000890000801F0300008A00008028030000EEEFFE802C0300008A000080340300008B0000804E030000EEEFFE80520300008B0000805E0300008C00008078030000EEEFFE807C0300008C000080880300008D000080A2030000EEEFFE80A60300008D000080B20300008F000080CC030000EEEFFE80D00300008F000080DC03000090000080E5030000EEEFFE80E903000090000080F203000091000080FB030000EEEFFE80FF03000091000080070400009300008021040000EEEFFE80250400009400008026040000950000802E04000096000080310400009800008032040000990000804C040000EEEFFE8050040000990000805C0400009A000080700400009B000080710400009D0000807A040000EEEFFE807E0400009D0000808A0400009E00008093040000EEEFFE80970400009E000080A30400009F000080AC040000EEEFFE80B00400009F000080BC040000A1000080C5040000EEEFFE80C9040000A1000080D5040000A2000080DE040000EEEFFE80E2040000A200008000050000A300008009050000EEEFFE800D050000A30000802D050000A900008033050000AB0000804D050000EEEFFE8051050000AB0000805D050000AC000084A8050000EEEFFE80AC050000B1000080B8050000B3000080E1050000EEEFFE80E5050000B3000080FD050000B400008011060000EEEFFE8015060000B400008046060000B50000805A060000EEEFFE805E060000B50000808F060000B6000080A3060000EEEFFE80A7060000B6000080D8060000B8000080DB060000B9000080DE060000BA000080E1060000BC000080E2060000BC000080EC060000EEEFFE80F1060000BC000080F8060000BD000080F9060000BE00008015070000EEEFFE8019070000BF0000801A070000C00000801D070000C10000801E070000C20000803A070000EEEFFE803E070000C30000803F070000C400008042070000C500008043070000C60000805F070000EEEFFE8063070000C700008064070000C800008067070000C900008068070000CA00008072070000EEEFFE8076070000CB00008077070000CC00008079070000CE0000807A070000EEEFFE8080070000BC0000808B070000D00000809E070000EEEFFE80A2070000D0000080C4070000D1000080D7070000EEEFFE80DB070000D1000080FD070000D200008010080000EEEFFE8014080000D200008036080000D400008041080000EEEFFE8045080000D400008056080000DA0000805D080000DB0000806C080000DC0000807B080000DD00008084080000DE0000809D080000E0000080A9080000EEEFFE80AD080000E1000080AE080000E2000080AF080000E2000080CB080000EEEFFE80CD080000E2000080D4080000E3000080D5080000E5000080D6080000E6000080EA080000E7000080ED080000E8000080EF080000E9000080F0080000EA00008009090000EC0000800A090000EEEFFE8010090000E200008018090000ED00008019090000EEEFFE801A090000F00000801B090000F10000802F090000F200008032090000F300008034090000F400008035090000F50000804C090000EEEFFE804D090000F90000804E090000FA0000806B090000EEEFFE806F090000FA0000808C090000FB0000808F090000FC00008091090000FD00008092090000FE000080A9090000EEEFFE80AA09000002010080AB09000003010080C809000004010080CB09000005010080CD09000006010080CE09000007010080E5090000EEEFFE80E60900000B010080E70900000C010080040A0000EEEFFE80080A00000C010080250A00000D010080280A00000E0100802A0A00000F0100802B0A000010010080420A0000EEEFFE80430A000014010080440A000015010080610A0000EEEFFE80650A000015010080820A000016010080850A000017010080870A000018010080880A0000190100809F0A000020010080A60A000021010080B30A000022010080CC0A000023010080D90A000024010080F70A000025010080150B000027010080220B000028010080400B0000290100805E0B00002A0100807C0B00002B010080880B0000EEEFFE808C0B00002B010080A50B00002C010080BE0B00002D010080D70B00002E010080F00B00002F010080090C000030010080270C000031010080450C000033010080480C0000EEEFFE805D0C0000360100806A0C0000370100806C0C000039010080790C00003A0100807B0C00003C010080880C00003D0100808A0C00003F0100808C0C000042010080A30C000043010080A60C000045010080A70C000045010080B50C0000EEEFFE80B70C000045010080C00C000046010080C10C000047010080DB0C0000EEEFFE80DF0C000047010080E20C000048010080220D000049010080230D0000450100802E0D0000EEEFFE803A0D0000EEEFFE803B0D00004B0100803C0D00004B0100804A0D0000EEEFFE804C0D00004B010080550D00004C010080560D00004D010080700D0000EEEFFE80740D00004D010080770D00004E010080B70D00004F010080B80D00004B010080C30D0000EEEFFE80CF0D0000EEEFFE80D00D000051010080D10D000051010080DF0D0000EEEFFE80E10D000051010080EA0D000052010080EB0D000053010080050E0000EEEFFE80090E0000530100800C0E0000540100804C0E0000550100804D0E000051010080580E0000EEEFFE80640E0000EEEFFE80650E0000570100806C0E0000EEEFFE80700E000058010080710E000059010080850E00005A010080AF0E00005B010080B00E00005D010080E50E0000EEEFFE80E90E00005E010080EA0E00005F010080F70E000060010080150F000061010080220F0000620100802F0F0000630100803C0F0000640100803D0F0000660100804A0F000067010080570F00006D0100805E0F0000700100805F0F0000710100806E0F0000720100807D0F0000730100808C0F0000740100809B0F000075010080A40F000076010080B00F000077010080CE0F000078010080E50F00007A010080FD0F00007B0100800C1000007C0100801C1000007D0100802B1000007F01008042100000800100804510000081010080471000008201008048100000830100805F100000EEEFFE80601000008B010080611000008C0100806B1000008D01008079100000EEEFFE807D1000008E010080991000008F0100809C100000900100809E100000910100809F10000092010080B6100000960100800500060009005400090070000000000009000A000D004E000D0032000D0018000D002500000000000D000E0011001A0018003F00110012001500260000000000150016001900250019002500190068001500160019003C0015001600150021001100120000000000000000000D000E000D0022000D0034000D00490014003B000D000E00110022000000000011001200150021001500210015006C001100120015002D00000000002E00510015002900000000002A00490015003000000000003100570015002500000000002600400015002B00000000002C004E00150038000000000039006E0015004B00000000004C006B001100120011001D000D000E0000000000000000000D00190009000A0009004300000000004400630009004B00000000004C006100090022000000000023004300090023000000000024005A00090021000000000022005600090025000000000026003C0009002100000000002200360009002B00000000002C004B0009004300000000004400630009004900000000004A00600009004B00000000004C00630009005300000000005400720009001900000000001A00240009001F000000000020003300090045000000000009000A000D002C0009000A0009000A000D004900000000004A0058000D00510009000A0009002400000000002500490009002900000000002A00530009002F000000000030005F0009001B00000000001C002F0009001D00000000001E004C000900250000000000260053000900370009004D00000000004E00930009000D00000000000D00870009004800000000004900B90009005200000000005300EB0009005A00000000005B00FA0009004600000000004700E80009002B000900300009003600090010001E0027000000000012001A0009000A000D004500000000000D000E0011002D000D000E000D004F00000000000D000E00110032000D000E000D005B00000000000D000E00110038000D000E000D006600000000000D000E001100170009000A00000000001B001D0009003900000000003A00C10009004300000000004400D50009004F00000000005000ED0009002200000000002300770009002D000900250009001F000900250009003800090026000000000009000A000D001400210042000000000016001D000D000E001100120015003E00110012001100240011001200150067000D000E00000000001E00200009000A000000000009000A000D003C0009000A0009001C0009000A000D004B000000000009000A000D004B00000000004C00820009000A0009001C0009000A000D0047000000000009000A000D003C0009000A0009001C0009000A000D0049000000000009000A000D005900000000005A008E0009000A0009001C0009000A000D004E000000000009000A000D006500000000006600A10009000A0009001C0009000A000D0054000900310009002B00090047000900270009004D00090047000900280009005D0009005C000900590009001E00000000001F004D0009004A00090044000900550009004300090051000900510009001E000000000011002E001100170011002E001100170011002E0011001700110017000900780009002E000900100026002C00000000001200220009000A000D00320000000000330052000D00C90009000A002300250000000000000000000900100026002C00000000001200220009000A000D00320000000000330052000D00CE0009000A002300250000000000000000000900100026002D00000000001200220009000A000D00320000000000330052000D00D40009000A00230025000000000000000000090026000000000009000A000D0023000D00C80009000A00090036000000000009000A000D002C000D0056000D002E000D0034000D002A0009000A0009002600090029000900320009000A000D0035000D002A000D004E000D0035000D0032000D0064000D0046000D003B000D0088000D002A000D0068000D002B000D00550009000A0009001C0009000A000D0052000000000009000A000D0022000D002900000000001100710009000A0009001C0009000A000D00450005000600F200000024000000B7100000010001002C000000000000000100000018000000000000001F00008005006E00F40000000800000001000000000000001000000000000000240000003C00000054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF120000000140200005500000001000000250000000100000001000000010000003D00000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C00000018000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200251100000000040000000100636C725F73656E645F6963735F696E7669746500000016002911000000000400000001003036303030303031000016002511000000002408000001002E6363746F7200000000160029110000000024080000010030363030303030330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF77093101010000000B00108E0C0084690D0006005C0000003C0000002C00000058000000000000000000000016000000190000000000EEC00000000000000000FFFF000000000000FFFFFFFF00000000FFFF0000000000000000000000000A0088080000000000002C1200000100000000000000000000000000000053746F72656450726F636564757265730043444135313336460000002DBA2EF10100000000000000B71000000000000000000000000000000000000001000000B71000002C00000000000000000000000000000000000000020002000D01000000000100FFFFFFFF00000000E31000000802000000000000FFFFFFFF00000000FFFFFFFF010001000000010000000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000000FEEFFEEF010000000100000000010000000000000000000000FFFFFFFFFFFFFFFFFFFF0900FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310108AFE65C01000000DB4BB0BA851E604CB6E8EA221D2B5706770000002F4C696E6B496E666F002F6E616D6573002F7372632F686561646572626C6F636B002F7372632F66696C65732F633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000400000006000000010000001B00000000000000220000000800000011000000070000000A00000006000000000000000500000000000000DC513301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E00000020000000D3000000380000008B0100003800000000000000BA000000800000005C00000028000000C81A0000440200002C0000006C000000030000001F000000060000001E000000070000000A0000000B00000008000000090000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001D0000001C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 AS N'sql_clr_ics.pdb'; + GO SET ANSI_NULLS OFF GO From a12ef80f76b151a101dc7128d38a3cef76744723 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Thu, 23 May 2019 17:44:19 +0300 Subject: [PATCH 12/27] updated assembly version tag --- sql_clr_ics/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql_clr_ics/Properties/AssemblyInfo.cs b/sql_clr_ics/Properties/AssemblyInfo.cs index ad77073..f240707 100644 --- a/sql_clr_ics/Properties/AssemblyInfo.cs +++ b/sql_clr_ics/Properties/AssemblyInfo.cs @@ -19,7 +19,7 @@ // Build Number // Revision // -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("2.0.0.0")] [assembly: System.Resources.NeutralResourcesLanguage("en-US")] From ca8a7a270e34b29c8435d351b68f69aa0b48b38c Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Fri, 24 May 2019 14:11:10 +0300 Subject: [PATCH 13/27] implemented method clr_send_ics_invite_custom for sending custom ICS content files --- sql_clr_ics/clr_send_ics_invite.cs | 271 +++++++++++++++++++++-------- 1 file changed, 200 insertions(+), 71 deletions(-) diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 82aff12..804f468 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -48,14 +48,14 @@ SqlString profile_name , ref SqlString event_identifier ) { -#region local variable declaration + #region local variable declaration ICredentialsByHost credentials = CredentialCache.DefaultNetworkCredentials; MailPriority mailPriority; -#endregion local variable declaration + #endregion local variable declaration -#region get missing info from sysmail profile + #region get missing info from sysmail profile if (from_address.IsNull || (username.IsNull && use_default_credentials.IsNull) || !profile_name.IsNull) { @@ -78,7 +78,8 @@ INNER JOIN [msdb].[dbo].[sysmail_profile] AS p rdr.Close(); con.Close(); throw new Exception("profile_name not specified and no default profile found"); - } else + } + else { profile_name = rdr.GetSqlString(0); } @@ -126,7 +127,7 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s #endregion get missing info from sysmail profile -#region default values initialization + #region default values initialization if (subject.IsNull || string.IsNullOrEmpty(subject.Value)) subject = "SQL Server Meeting"; if (body_format.IsNull || string.IsNullOrEmpty(body_format.Value)) body_format = "TEXT"; @@ -165,14 +166,14 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s #endregion default values initialization #region validations - + StringBuilder sb_Errors = new StringBuilder(); if (from_address.IsNull || string.IsNullOrEmpty(from_address.Value)) sb_Errors.AppendLine("Missing sender: Please specify @from_address"); if ( (recipients.IsNull || string.IsNullOrEmpty(recipients.Value)) - && (copy_recipients.IsNull || string.IsNullOrEmpty(copy_recipients.Value)) - && (blind_copy_recipients.IsNull || string.IsNullOrEmpty(blind_copy_recipients.Value)) + && (copy_recipients.IsNull || string.IsNullOrEmpty(copy_recipients.Value)) + && (blind_copy_recipients.IsNull || string.IsNullOrEmpty(blind_copy_recipients.Value)) ) sb_Errors.AppendLine("Missing recipients: Please specify either @recipients, @copy_recipients or @blind_copy_recipients"); @@ -213,28 +214,9 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s #endregion validations -#region initialize MailMessage and recipients + #region initialize recipients using faux mail message MailMessage msg = new MailMessage(); - msg.Subject = subject.Value; - msg.Body = body.Value; - msg.Priority = mailPriority; - msg.IsBodyHtml = (body_format.Value == "HTML"); - - if (!file_attachments.IsNull) - { - foreach (var att in file_attachments.Value.Split(';')) - { - try - { - msg.Attachments.Add(new Attachment(att)); - } - catch (Exception e) - { - throw new Exception(string.Format("Unable to attach '{0}': {1}", att, e.Message)); - } - } - } try { @@ -281,39 +263,39 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s throw new Exception("@blind_copy_recipients is invalid: " + e.Message); } - #endregion initialize MailMessage and recipients - -#region construct ICS file contents - - StringBuilder str = new StringBuilder(); - str.AppendLine("BEGIN:VCALENDAR"); - str.AppendLine(string.Format("PRODID:-//{0}", prod_id.Value)); - str.AppendLine("VERSION:2.0"); - str.AppendLine(string.Format("METHOD:{0}", method.Value.ToUpper())); - str.AppendLine(string.Format("SEQUENCE:{0}", sequence.Value)); - - str.AppendLine("BEGIN:VEVENT"); - str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", start_time_utc.Value)); - str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", timestamp_utc.Value)); - str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", end_time_utc.Value)); - if (!location.IsNull) str.AppendLine("LOCATION: " + location.Value); - str.AppendLine(string.Format("UID:{0}", event_identifier.Value)); - str.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body)); - str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body)); - str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject)); - str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); - str.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); + #endregion initialize recipients using faux mail message + + #region construct ICS file contents + + StringBuilder ics_contents = new StringBuilder(); + ics_contents.AppendLine("BEGIN:VCALENDAR"); + ics_contents.AppendLine(string.Format("PRODID:-//{0}", prod_id.Value)); + ics_contents.AppendLine("VERSION:2.0"); + ics_contents.AppendLine(string.Format("METHOD:{0}", method.Value.ToUpper())); + ics_contents.AppendLine(string.Format("SEQUENCE:{0}", sequence.Value)); + + ics_contents.AppendLine("BEGIN:VEVENT"); + ics_contents.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", start_time_utc.Value)); + ics_contents.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", timestamp_utc.Value)); + ics_contents.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", end_time_utc.Value)); + if (!location.IsNull) ics_contents.AppendLine("LOCATION: " + location.Value); + ics_contents.AppendLine(string.Format("UID:{0}", event_identifier.Value)); + ics_contents.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body)); + ics_contents.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body)); + ics_contents.AppendLine(string.Format("SUMMARY:{0}", msg.Subject)); + ics_contents.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); + ics_contents.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); switch (mailPriority) { case MailPriority.Normal: - str.AppendLine("PRIORITY:5"); + ics_contents.AppendLine("PRIORITY:5"); break; case MailPriority.Low: - str.AppendLine("PRIORITY:9"); + ics_contents.AppendLine("PRIORITY:9"); break; case MailPriority.High: - str.AppendLine("PRIORITY:1"); + ics_contents.AppendLine("PRIORITY:1"); break; default: break; @@ -325,42 +307,191 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s foreach (MailAddress addr in msg.To) { if (addr.Address == msg.From.Address) organizer_in_recipients = true; - str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, recipients_role.Value.ToUpper())); + ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, recipients_role.Value.ToUpper())); } foreach (MailAddress addr in msg.CC) { if (addr.Address == msg.From.Address) organizer_in_recipients = true; - str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, copy_recipients_role.Value.ToUpper())); + ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, copy_recipients_role.Value.ToUpper())); } foreach (MailAddress addr in msg.Bcc) { if (addr.Address == msg.From.Address) organizer_in_recipients = true; - str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, blind_copy_recipients_role.Value.ToUpper())); + ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, blind_copy_recipients_role.Value.ToUpper())); } if (!organizer_in_recipients) { msg.Bcc.Add(msg.From); - str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); + ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); } if (use_reminder && method.Value != "CANCEL") { - str.AppendLine("BEGIN:VALARM"); - str.AppendLine(string.Format("TRIGGER:-PT{0}M", reminder_minutes.Value)); - str.AppendLine("ACTION:DISPLAY"); - str.AppendLine("DESCRIPTION:Reminder"); - str.AppendLine("END:VALARM"); + ics_contents.AppendLine("BEGIN:VALARM"); + ics_contents.AppendLine(string.Format("TRIGGER:-PT{0}M", reminder_minutes.Value)); + ics_contents.AppendLine("ACTION:DISPLAY"); + ics_contents.AppendLine("DESCRIPTION:Reminder"); + ics_contents.AppendLine("END:VALARM"); + } + + ics_contents.AppendLine("END:VEVENT"); + ics_contents.AppendLine("END:VCALENDAR"); + + #endregion construct ICS file contents + + #region send mail + + try + { + clr_send_ics_invite_custom(recipients, copy_recipients, blind_copy_recipients, from_address, reply_to, subject, body, body_format, importance, file_attachments, new SqlString(ics_contents.ToString()), method, smtp_servername, port, enable_ssl, use_default_credentials, username, password); + if (!suppress_info_messages) + SqlContext.Pipe.Send(string.Format("Mail Sent. Event Identifier: {0}", event_identifier.Value)); + } + catch (Exception e) + { + throw; + } + + #endregion send mail + } + + [SqlProcedure] + public static void clr_send_ics_invite_custom( + SqlString recipients, SqlString copy_recipients, SqlString blind_copy_recipients + , SqlString from_address, SqlString reply_to + , SqlString subject, SqlString body, SqlString body_format + , SqlString importance, SqlString file_attachments + , SqlString ics_contents, SqlString method + , SqlString smtp_servername, SqlInt32 port, SqlBoolean enable_ssl + , SqlBoolean use_default_credentials, SqlString username, SqlString password + ) + { + + #region local variable declaration + + ICredentialsByHost credentials = CredentialCache.DefaultNetworkCredentials; + MailPriority mailPriority; + + #endregion local variable declaration + + #region default values initialization + + if (subject.IsNull || string.IsNullOrEmpty(subject.Value)) subject = "SQL Server Meeting"; + if (body_format.IsNull || string.IsNullOrEmpty(body_format.Value)) body_format = "TEXT"; + if (importance.IsNull || string.IsNullOrEmpty(importance.Value)) importance = "Normal"; + + if (smtp_servername.IsNull || string.IsNullOrEmpty(smtp_servername.Value)) smtp_servername = "localhost"; + if (port.IsNull) port = 25; + if (enable_ssl.IsNull) enable_ssl = false; + + if (username.IsNull || string.IsNullOrEmpty(username.Value)) + { + use_default_credentials = true; + } + else + { + if (password.IsNull || string.IsNullOrEmpty(password.Value)) password = ""; + credentials = new NetworkCredential(username.Value, password.Value); + } + + if (method.IsNull) method = "REQUEST"; + + #endregion default values initialization + + #region validations + + StringBuilder sb_Errors = new StringBuilder(); + + if (from_address.IsNull || string.IsNullOrEmpty(from_address.Value)) sb_Errors.AppendLine("Missing sender: Please specify @from_address"); + if ( + (recipients.IsNull || string.IsNullOrEmpty(recipients.Value)) + && (copy_recipients.IsNull || string.IsNullOrEmpty(copy_recipients.Value)) + && (blind_copy_recipients.IsNull || string.IsNullOrEmpty(blind_copy_recipients.Value)) + ) + sb_Errors.AppendLine("Missing recipients: Please specify either @recipients, @copy_recipients or @blind_copy_recipients"); + + if (body_format.Value != "HTML" && body_format.Value != "TEXT") sb_Errors.AppendLine(string.Format("@body_format {0} is invalid. Valid values: TEXT, HTML", body_format.Value)); + if (!Enum.TryParse(method.Value, true, out iCalMethods method_enumvalue)) sb_Errors.AppendLine(string.Format("@method {0} is invalid. Valid values: {1}", method.Value, Enum.GetNames(typeof(iCalMethods)).ToString().ToUpper())); + if (!Enum.TryParse(importance.Value, true, out mailPriority)) sb_Errors.AppendLine(string.Format("@importance {0} is invalid. Valid values: {1}", importance.Value, Enum.GetNames(typeof(MailPriority)).ToString().ToUpper())); + + if (sb_Errors.Length > 0) throw new Exception("Unable to send mail due to validation error(s): " + sb_Errors); + + #endregion validations + + #region initialize MailMessage and recipients + + MailMessage msg = new MailMessage(); + msg.Subject = subject.Value; + msg.Body = body.Value; + msg.Priority = mailPriority; + msg.IsBodyHtml = (body_format.Value == "HTML"); + + if (!file_attachments.IsNull) + { + foreach (var att_path in file_attachments.Value.Split(';')) + { + try + { + msg.Attachments.Add(new Attachment(att_path)); + } + catch (Exception e) + { + throw new Exception(string.Format("Unable to attach '{0}': {1}", att_path, e.Message)); + } + } } - str.AppendLine("END:VEVENT"); - str.AppendLine("END:VCALENDAR"); + try + { + msg.From = new MailAddress(from_address.Value); + } + catch (Exception e) + { + throw new Exception("@from_address is invalid: " + e.Message); + } -#endregion construct ICS file contents + try + { + if (!reply_to.IsNull && !string.IsNullOrEmpty(reply_to.Value)) msg.ReplyToList.Add(reply_to.Value.Replace(';', ',')); + } + catch (Exception e) + { + throw new Exception("@reply_to is invalid: " + e.Message); + } + + try + { + msg.To.Add(recipients.Value.Replace(';', ',')); + } + catch (Exception e) + { + throw new Exception("@recipients is invalid: " + e.Message); + } + + try + { + if (!copy_recipients.IsNull && !string.IsNullOrEmpty(copy_recipients.Value)) msg.CC.Add(copy_recipients.Value.Replace(';', ',')); + } + catch (Exception e) + { + throw new Exception("@copy_recipients is invalid: " + e.Message); + } -#region initialize and configure SmtpClient + try + { + if (!blind_copy_recipients.IsNull && !string.IsNullOrEmpty(blind_copy_recipients.Value)) msg.Bcc.Add(blind_copy_recipients.Value.Replace(';', ',')); + } + catch (Exception e) + { + throw new Exception("@blind_copy_recipients is invalid: " + e.Message); + } + + #endregion initialize MailMessage and recipients + + #region initialize and configure SmtpClient SmtpClient smtpclient = new SmtpClient(); @@ -377,7 +508,7 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s AlternateView HTML = AlternateView.CreateAlternateViewFromString(body.Value, new System.Net.Mime.ContentType("text/html")); msg.AlternateViews.Add(HTML); - AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), contype); + AlternateView avCal = AlternateView.CreateAlternateViewFromString(ics_contents.Value, contype); msg.AlternateViews.Add(avCal); msg.Headers.Add("Content-class", "urn:content-classes:calendarmessage"); @@ -389,19 +520,17 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s #endregion initialize and configure SmtpClient -#region send mail + #region send mail try { smtpclient.Send(msg); - if (!suppress_info_messages) - SqlContext.Pipe.Send(string.Format("Mail Sent. Event Identifier: {0}", event_identifier.Value)); } catch (Exception e) { throw new Exception("Error sending mail: " + e.Message); } -#endregion send mail + #endregion send mail } } \ No newline at end of file From ba93b7092c5aec1f572070228245948b7f26e0af Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 14:17:41 +0300 Subject: [PATCH 14/27] fixed some bugs, added wrapper procedure with proper data types and default values for parameters --- sql_clr_ics/Script.PostDeployment.sql | 50 -------------------------- sql_clr_ics/clr_send_ics_invite.cs | 9 ++--- sql_clr_ics/sp_send_calendar_event.sql | 43 ++++++++++++++++++++++ sql_clr_ics/sql_clr_ics.sqlproj | 6 ++-- 4 files changed, 51 insertions(+), 57 deletions(-) delete mode 100644 sql_clr_ics/Script.PostDeployment.sql create mode 100644 sql_clr_ics/sp_send_calendar_event.sql diff --git a/sql_clr_ics/Script.PostDeployment.sql b/sql_clr_ics/Script.PostDeployment.sql deleted file mode 100644 index 5ad2f71..0000000 --- a/sql_clr_ics/Script.PostDeployment.sql +++ /dev/null @@ -1,50 +0,0 @@ -/* -Post-Deployment Script ---------------------------------------------------- -This script re-creates the CLR stored procedure with default values for parameters -(which is not possible natively) -*/ -IF OBJECT_ID('clr_send_ics_invite') IS NOT NULL DROP PROCEDURE [dbo].[clr_send_ics_invite] -GO -SET ANSI_NULLS OFF -GO -SET QUOTED_IDENTIFIER OFF -GO -CREATE PROCEDURE [dbo].[clr_send_ics_invite] - @profile_name [sysname] = NULL, - @recipients [nvarchar](4000) = NULL, - @copy_recipients [nvarchar](4000) = NULL, - @blind_copy_recipients [nvarchar](4000) = NULL, - @from_address [nvarchar](4000) = NULL, - @reply_to [nvarchar](4000) = NULL, - @subject [nvarchar](255) = N'SQL Server Meeting', - @body [nvarchar](4000) = NULL, - @body_format [nvarchar](20) = N'TEXT', - @importance [nvarchar](6) = N'Normal', - @sensitivity [nvarchar](12) = N'Public', - @file_attachments [nvarchar](4000) = NULL, - @location [nvarchar](4000) = NULL, - @start_time_utc [datetime] = NULL, - @end_time_utc [datetime] = NULL, - @timestamp_utc [datetime] = NULL, - @method [nvarchar](14) = N'REQUEST', - @sequence [int] = 0, - @prod_id [nvarchar](4000) = NULL, - @use_reminder [bit] = 1, - @reminder_minutes [int] = 15, - @require_rsvp [bit] = 0, - @recipients_role [nvarchar](15) = N'REQ-PARTICIPANT', - @copy_recipients_role [nvarchar](15) = N'OPT-PARTICIPANT', - @blind_copy_recipients_role [nvarchar](15) = N'NON-PARTICIPANT', - @smtp_servername [nvarchar](4000) = N'localhost', - @port [int] = 25, - @enable_ssl [bit] = 0, - @use_default_credentials [bit] = 0, - @username [nvarchar](4000) = NULL, - @password [nvarchar](4000) = NULL, - @suppress_info_messages [bit] = 0, - @event_identifier [nvarchar](4000) = NULL OUTPUT -WITH EXECUTE AS CALLER -AS -EXTERNAL NAME [sql_clr_ics].[StoredProcedures].[clr_send_ics_invite] -GO diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 804f468..4e9b905 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -280,9 +280,9 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s ics_contents.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", end_time_utc.Value)); if (!location.IsNull) ics_contents.AppendLine("LOCATION: " + location.Value); ics_contents.AppendLine(string.Format("UID:{0}", event_identifier.Value)); - ics_contents.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body)); - ics_contents.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body)); - ics_contents.AppendLine(string.Format("SUMMARY:{0}", msg.Subject)); + ics_contents.AppendLine(string.Format("DESCRIPTION:{0}", body.Value)); + ics_contents.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", body.Value)); + ics_contents.AppendLine(string.Format("SUMMARY:{0}", subject.Value)); ics_contents.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); ics_contents.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); @@ -503,7 +503,8 @@ public static void clr_send_ics_invite_custom( smtpclient.EnableSsl = enable_ssl.Value; smtpclient.Credentials = credentials; System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar"); - contype.Parameters.Add("method", method.Value.ToUpper()); + contype.Parameters.Add("method", "REQUEST"); + //contype.Parameters.Add("method", method.Value.ToUpper()); contype.Parameters.Add("name", "Meeting.ics"); AlternateView HTML = AlternateView.CreateAlternateViewFromString(body.Value, new System.Net.Mime.ContentType("text/html")); diff --git a/sql_clr_ics/sp_send_calendar_event.sql b/sql_clr_ics/sp_send_calendar_event.sql new file mode 100644 index 0000000..f7a54cb --- /dev/null +++ b/sql_clr_ics/sp_send_calendar_event.sql @@ -0,0 +1,43 @@ +/* +--------------------------------------------------- +This serves as a wrapper for the CLR stored procedure with default values for parameters +(which is not possible natively for all data types in the CLR procedure itself) +*/ +CREATE PROCEDURE [dbo].[sp_send_calendar_event] + @profile_name [sysname] = NULL, + @recipients [nvarchar](max) = NULL, + @copy_recipients [nvarchar](max) = NULL, + @blind_copy_recipients [nvarchar](max) = NULL, + @from_address [nvarchar](max) = NULL, + @reply_to [nvarchar](max) = NULL, + @subject [nvarchar](255) = N'SQL Server Meeting', + @body [nvarchar](max) = NULL, + @body_format [nvarchar](20) = N'TEXT', + @importance [nvarchar](6) = N'Normal', + @sensitivity [nvarchar](12) = N'Public', + @file_attachments [nvarchar](max) = NULL, + @location [nvarchar](100) = NULL, + @start_time_utc [datetime] = NULL, + @end_time_utc [datetime] = NULL, + @timestamp_utc [datetime] = NULL, + @method [nvarchar](14) = N'REQUEST', + @sequence [int] = 0, + @prod_id [nvarchar](100) = NULL, + @use_reminder [bit] = 1, + @reminder_minutes [int] = 15, + @require_rsvp [bit] = 0, + @recipients_role [nvarchar](15) = N'REQ-PARTICIPANT', + @copy_recipients_role [nvarchar](15) = N'OPT-PARTICIPANT', + @blind_copy_recipients_role [nvarchar](15) = N'NON-PARTICIPANT', + @smtp_servername [nvarchar](255) = N'localhost', + @port [int] = 25, + @enable_ssl [bit] = 0, + @use_default_credentials [bit] = 0, + @username [nvarchar](255) = NULL, + @password [nvarchar](255) = NULL, + @suppress_info_messages [bit] = 0, + @event_identifier [nvarchar](100) = NULL OUTPUT +WITH EXECUTE AS CALLER +AS +SET NOCOUNT ON; +EXEC dbo.[clr_send_ics_invite] @profile_name, @recipients, @copy_recipients, @blind_copy_recipients, @from_address, @reply_to, @subject, @body, @body_format, @importance, @sensitivity, @file_attachments, @location, @start_time_utc, @end_time_utc, @timestamp_utc, @method, @sequence, @prod_id, @use_reminder, @reminder_minutes, @require_rsvp, @recipients_role, @copy_recipients_role, @blind_copy_recipients_role, @smtp_servername, @port, @enable_ssl, @use_default_credentials, @username, @password, @suppress_info_messages, @event_identifier OUTPUT diff --git a/sql_clr_ics/sql_clr_ics.sqlproj b/sql_clr_ics/sql_clr_ics.sqlproj index c5aee45..8c8c78e 100644 --- a/sql_clr_ics/sql_clr_ics.sqlproj +++ b/sql_clr_ics/sql_clr_ics.sqlproj @@ -73,9 +73,6 @@ - - - @@ -84,4 +81,7 @@ PreserveNewest + + + \ No newline at end of file From 2603c9eacc2097b9b4afd3e192dd3ecb39b006d9 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 14:22:05 +0300 Subject: [PATCH 15/27] added some commentary header --- sql_clr_ics/sp_send_calendar_event.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql_clr_ics/sp_send_calendar_event.sql b/sql_clr_ics/sp_send_calendar_event.sql index f7a54cb..c6f3618 100644 --- a/sql_clr_ics/sp_send_calendar_event.sql +++ b/sql_clr_ics/sp_send_calendar_event.sql @@ -1,4 +1,8 @@ /* + sql_clr_ics copyright (c) Eitan Blumin +--------------------------------------------------- +Source: https://github.com/EitanBlumin/sql_clr_ics +License: MIT (https://github.com/EitanBlumin/sql_clr_ics/blob/master/LICENSE) --------------------------------------------------- This serves as a wrapper for the CLR stored procedure with default values for parameters (which is not possible natively for all data types in the CLR procedure itself) From af336f84c9e9dfa5ef6376aca07b4ba6db7a1e70 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 14:31:29 +0300 Subject: [PATCH 16/27] Update README.md --- README.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 085114b..b248cd0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# sql_clr_ics: clr_send_ics_invite +# sql_clr_ics: clr_send_ics_invite, sp_send_calendar_event Send Calendar Event / Appointment Invitations (iCal formatted file) from within SQL Server using a CLR stored procedure @@ -14,7 +14,7 @@ Alternatively, you can use [this simple installation script](https://github.com/ ## Syntax ``` -exec clr_send_ics_invite +exec sp_send_calendar_event [ [ @profile_name = ] 'profile_name' ] [ , [ @recipients = ] 'recipients [ ; ...n ]' ] [ , [ @copy_recipients = ] 'copy_recipients [ ; ...n ]' ] @@ -58,23 +58,23 @@ exec clr_send_ics_invite `[ @recipients = ] 'recipients'` - Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. `[ @copy_recipients = ] 'copy_recipients'` - Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. `[ @blind_copy_recipients = ] 'blind_copy_recipients'` - Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(4000)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. `[ @from_address = ] 'from_address'` - Is the value of the 'from address' of the email message, and the organizer of the calendar meeting. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is NULL. + Is the value of the 'from address' of the email message, and the organizer of the calendar meeting. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(max)**. If no parameter is specified, the default is NULL. `[ @reply_to = ] 'reply_to'` - Is the value of the 'reply to address' of the email message. It accepts only one email address as a valid value. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is NULL. + Is the value of the 'reply to address' of the email message. It accepts only one email address as a valid value. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(max)**. If no parameter is specified, the default is NULL. `[ @subject = ] 'subject'` @@ -82,7 +82,7 @@ exec clr_send_ics_invite `[ @body = ] 'body'` - Is the body of the e-mail message. The message body is of type **nvarchar(4000)**, with a default of NULL. + Is the body of the e-mail message. The message body is of type **nvarchar(max)**, with a default of NULL. `[ @body_format = ] 'body_format'` @@ -115,11 +115,11 @@ exec clr_send_ics_invite `[ @file_attachments = ] 'file_attachments'` - Is a semicolon-delimited list of file names to attach to the e-mail message. Files in the list must be specified as absolute paths. The attachments list is of type **nvarchar(4000)**. By default, Database Mail limits file attachments to 1 MB per file. + Is a semicolon-delimited list of file names to attach to the e-mail message. Files in the list must be specified as absolute paths. The attachments list is of type **nvarchar(max)**. By default, Database Mail limits file attachments to 1 MB per file. `[ @location = ] 'location'` - Is the location of the calendar meeting. The parameter is of type **nvarchar(4000)**, with a default of NULL. + Is the location of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of NULL. `[ @start_time_utc = ] 'start_time_utc'` @@ -154,7 +154,7 @@ exec clr_send_ics_invite `[ @prod_id = ] 'prod_id'` - Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(4000)**, with a default of 'Schedule a Meeting'. + Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of 'Schedule a Meeting'. `[ @use_reminder = ] use_reminder` @@ -203,7 +203,7 @@ Defaults to NON-PARTICIPANT. `[ @smtp_servername = ] 'smtp_servername'` - Is the SMTP server name to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, and no mail profile was used, the default is 'localhost'. + Is the SMTP server name to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(255)**. If no parameter is specified, and no mail profile was used, the default is 'localhost'. `[ @port = ] port` @@ -219,11 +219,11 @@ Defaults to NON-PARTICIPANT. `[ @username = ] username` - Is the userame to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, and no mail profile was used, the default is to use the server's default network credentials instead. + Is the userame to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(255)**. If no parameter is specified, and no mail profile was used, the default is to use the server's default network credentials instead. `[ @password = ] password` - Is the password to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(4000)**. If no parameter is specified, the default is to use an empty string for the password. + Is the password to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(255)**. If no parameter is specified, the default is to use an empty string for the password. | **NOTE:** Unfortunately, since MSDB doesn't allow access to the mail profile passwords, it's impossible to utilize an existing mail profile for getting the password for an SMTP server. Therefore, unless you want to use an empty password or default network credentials, *you must specify a value for this parameter*. | | --- | @@ -234,7 +234,7 @@ Defaults to NON-PARTICIPANT. `[ @event_identifier = ] event_identifier [ OUTPUT ]` - Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(4000)**. + Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(255)**. ## Result Sets @@ -244,7 +244,7 @@ Defaults to NON-PARTICIPANT. ## Remarks -I did my best to align the parameters of this procedure with Microsoft's **sp_send_dbmail** procedure. Unfortunately, since this is a CLR procedure, there are limitations to what can be done. Specifically, it's impossible to define default values for parameters of type **nvarchar(max)** and **varchar(max)**, and so I had to replace those with **nvarchar(4000)**. +I did my best to align the parameters of this procedure with Microsoft's **sp_send_dbmail** procedure. Unfortunately, since this is a CLR procedure, there are limitations to what can be done. Specifically, it's impossible to define default values for parameters of type **nvarchar(max)** and **varchar(max)**, and so I had to create a wrapper procedure in T-SQL instead. Even though I tried to utilize Microsoft's Database Mail Profile mechanics, I couldn't get access to the account passwords (which is probably a good thing), and so the **@password** parameter becomes mandatory (unless you want to use an empty password or the server's default network credentials). @@ -255,14 +255,14 @@ I also didn't implement any functionality involving multiple accounts per profil ### A. Send a calendar invitation with RSVP requirement ``` -DECLARE @EventID nvarchar(4000) +DECLARE @EventID nvarchar(255) EXEC clr_send_ics_invite @from_address = N'the_organizer@gmail.com', @recipients = N'someone@gmail.com,otherguy@outlook.com', @subject = N'let us meet for pizza!', @body = N'

Pizza!

Bring your own beer!

', - @body_format = N'HTML', + @body_format = N'HTML', @location = N'The Pizza place at Hank and Errison corner', @start_time_utc = '2019-07-02 19:00', @end_time_utc = '2019-07-02 23:00', @@ -288,7 +288,7 @@ EXEC clr_send_ics_invite @recipients = N'someone@gmail.com,otherguy@outlook.com', @subject = N'let us meet for pizza!', @body = N'

Pizza!

Bring your own beer!

', - @body_format = N'HTML', + @body_format = N'HTML', @location = N'The Pizza place at Hank and Errison corner', @start_time_utc = '2019-07-02 19:00', @end_time_utc = '2019-07-02 23:00', @@ -308,14 +308,14 @@ SELECT EventID = @EventID ### C. Send an automated calendar invitation without RSVP requirement (i.e. participants are auto-accepted) ``` -DECLARE @EventID nvarchar(4000) +DECLARE @EventID nvarchar(255) EXEC clr_send_ics_invite @from_address = N'sla_bot@company.com', @recipients = N'employee1@company.com,employee2@company.com', @subject = N'Weekly SLA Shift', @body = N'

You are on-call this week!

This is an automated message

', - @body_format = N'HTML', + @body_format = N'HTML', @location = N'Our offices', @start_time_utc = '2019-07-01 00:00', @end_time_utc = '2019-07-04 23:59', From 33a749b226eb05fb3b093ab420aadb790a571af5 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 14:32:03 +0300 Subject: [PATCH 17/27] changed default text param lengths --- sql_clr_ics/sp_send_calendar_event.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql_clr_ics/sp_send_calendar_event.sql b/sql_clr_ics/sp_send_calendar_event.sql index c6f3618..fb5099b 100644 --- a/sql_clr_ics/sp_send_calendar_event.sql +++ b/sql_clr_ics/sp_send_calendar_event.sql @@ -20,13 +20,13 @@ CREATE PROCEDURE [dbo].[sp_send_calendar_event] @importance [nvarchar](6) = N'Normal', @sensitivity [nvarchar](12) = N'Public', @file_attachments [nvarchar](max) = NULL, - @location [nvarchar](100) = NULL, + @location [nvarchar](255) = NULL, @start_time_utc [datetime] = NULL, @end_time_utc [datetime] = NULL, @timestamp_utc [datetime] = NULL, @method [nvarchar](14) = N'REQUEST', @sequence [int] = 0, - @prod_id [nvarchar](100) = NULL, + @prod_id [nvarchar](255) = NULL, @use_reminder [bit] = 1, @reminder_minutes [int] = 15, @require_rsvp [bit] = 0, @@ -40,7 +40,7 @@ CREATE PROCEDURE [dbo].[sp_send_calendar_event] @username [nvarchar](255) = NULL, @password [nvarchar](255) = NULL, @suppress_info_messages [bit] = 0, - @event_identifier [nvarchar](100) = NULL OUTPUT + @event_identifier [nvarchar](255) = NULL OUTPUT WITH EXECUTE AS CALLER AS SET NOCOUNT ON; From 2d39909661e01a8fd4e3c6a06c5a2935c5d5abc3 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 14:45:58 +0300 Subject: [PATCH 18/27] implemented TEXT body format. fixed #7 --- sql_clr_ics/clr_send_ics_invite.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 4e9b905..7bff259 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -281,7 +281,7 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s if (!location.IsNull) ics_contents.AppendLine("LOCATION: " + location.Value); ics_contents.AppendLine(string.Format("UID:{0}", event_identifier.Value)); ics_contents.AppendLine(string.Format("DESCRIPTION:{0}", body.Value)); - ics_contents.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", body.Value)); + ics_contents.AppendLine(string.Format("X-ALT-DESC;FMTTYPE={0}:{1}", body_format.Value == "HTML" ? "text/html" : "text/plain", body.Value)); ics_contents.AppendLine(string.Format("SUMMARY:{0}", subject.Value)); ics_contents.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); ics_contents.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); @@ -507,8 +507,8 @@ public static void clr_send_ics_invite_custom( //contype.Parameters.Add("method", method.Value.ToUpper()); contype.Parameters.Add("name", "Meeting.ics"); - AlternateView HTML = AlternateView.CreateAlternateViewFromString(body.Value, new System.Net.Mime.ContentType("text/html")); - msg.AlternateViews.Add(HTML); + AlternateView avBody = AlternateView.CreateAlternateViewFromString(body.Value, new System.Net.Mime.ContentType(body_format.Value == "HTML" ? "text/html" : "text/plain")); + msg.AlternateViews.Add(avBody); AlternateView avCal = AlternateView.CreateAlternateViewFromString(ics_contents.Value, contype); msg.AlternateViews.Add(avCal); From d90cc6099b66c8325583c101b88e4452b30a57ee Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 15:06:37 +0300 Subject: [PATCH 19/27] update syntax --- README.md | 68 +++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index b248cd0..ddc5604 100644 --- a/README.md +++ b/README.md @@ -23,31 +23,31 @@ exec sp_send_calendar_event [ , [ @reply_to = ] 'reply_to' ] [ , [ @subject = ] 'subject' ] [ , [ @body = ] 'body' ] - [ , [ @body_format = ] 'body_format' ] - [ , [ @importance = ] 'importance' ] - [ , [ @sensitivity = ] 'sensitivity' ] + [ , [ @body_format = ] 'TEXT | HTML' ] + [ , [ @importance = ] 'LOW | NORMAL | HIGH' ] + [ , [ @sensitivity = ] 'PUBLIC | PRIVATE | CONFIDENTIAL' ] [ , [ @file_attachments = ] 'file_attachments [ ; ...n ]' ] [ , [ @location = ] 'location' ] [ , [ @start_time_utc = ] 'start_time_utc' ] [ , [ @end_time_utc = ] 'end_time_utc' ] [ , [ @timestamp_utc = ] 'timestamp_utc' ] - [ , [ @method = ] 'method' ] + [ , [ @method = ] 'PUBLISH | REQUEST | REPLY | CANCEL | ADD | REFRESH | COUNTER | DECLINECOUNTER' ] [ , [ @sequence = ] sequence ] [ , [ @prod_id = ] 'prod_id' ] - [ , [ @use_reminder = ] use_reminder ] + [ , [ @use_reminder = ] 1 | 0 ] [ , [ @reminder_minutes = ] reminder_minutes ] - [ , [ @require_rsvp = ] require_rsvp ] - [ , [ @recipients_role = ] 'recipients_role' ] - [ , [ @copy_recipients_role = ] 'copy_recipients_role' ] - [ , [ @blind_copy_recipients_role = ] 'blind_copy_recipients_role' ] + [ , [ @require_rsvp = ] 1 | 0 ] + [ , [ @recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR' ] + [ , [ @copy_recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR' ] + [ , [ @blind_copy_recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR' ] [ , [ @smtp_servername = ] 'smtp_servername' ] [ , [ @port = ] port ] - [ , [ @enable_ssl = ] enable_ssl ] + [ , [ @enable_ssl = ] 1 | 0 ] [ , [ @use_default_credentials = ] use_default_credentials ] - [ , [ @username = ] username ] - [ , [ @password = ] password ] - [ , [ @suppress_info_messages = ] suppress_info_messages ] - [ , [ @event_identifier = ] event_identifier [ OUTPUT ] ] + [ , [ @username = ] 'username' ] + [ , [ @password = ] 'password' ] + [ , [ @suppress_info_messages = ] 1 | 0 ] + [ , [ @event_identifier = ] 'event_identifier' [ OUTPUT ] ] ``` ## Arguments @@ -56,15 +56,15 @@ exec sp_send_calendar_event Is the name of the profile to send the message from. The *profile_name* is of type **sysname**, with a default of NULL. The *profile_name* must be the name of an existing Database Mail profile. When no *profile_name* is specified, **clr_send_ics_invite** checks whether **@from_address** was specified. If not, it uses the default public profile for the **msdb** database. If **@from_address** wasn't specified, and there is no default public profile for the database, **@profile_name** must be specified. -`[ @recipients = ] 'recipients'` +`[ @recipients = ] 'recipients [ ; ...n ]'` Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. -`[ @copy_recipients = ] 'copy_recipients'` +`[ @copy_recipients = ] 'copy_recipients [ ; ...n ]'` Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. -`[ @blind_copy_recipients = ] 'blind_copy_recipients'` +`[ @blind_copy_recipients = ] 'blind_copy_recipients [ ; ...n ]'` Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. @@ -84,7 +84,7 @@ exec sp_send_calendar_event Is the body of the e-mail message. The message body is of type **nvarchar(max)**, with a default of NULL. -`[ @body_format = ] 'body_format'` +`[ @body_format = ] 'TEXT | HTML'` Is the format of the message body. The parameter is of type **varchar(20)**, with a default of NULL. When specified, the headers of the outgoing message are set to indicate that the message body has the specified format. The parameter may contain one of the following values: @@ -93,7 +93,7 @@ exec sp_send_calendar_event Defaults to TEXT. -`[ @importance = ] 'importance'` +`[ @importance = ] 'LOW | NORMAL | HIGH'` Is the importance of the message. The parameter is of type **varchar(6)**. The parameter may contain one of the following values: @@ -103,7 +103,7 @@ exec sp_send_calendar_event Defaults to Normal. -`[ @sensitivity = ] 'sensitivity'` +`[ @sensitivity = ] 'PUBLIC | PRIVATE | CONFIDENTIAL'` Is the sensitivity classification of the message. The parameter is of type **nvarchar(12)**. The parameter may contain one of the following values: @@ -113,7 +113,7 @@ exec sp_send_calendar_event Defaults to Public. -`[ @file_attachments = ] 'file_attachments'` +`[ @file_attachments = ] 'file_attachments [ ; ...n ]'` Is a semicolon-delimited list of file names to attach to the e-mail message. Files in the list must be specified as absolute paths. The attachments list is of type **nvarchar(max)**. By default, Database Mail limits file attachments to 1 MB per file. @@ -133,7 +133,7 @@ exec sp_send_calendar_event Is the DTSTAMP property of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to current UTC time. -`[ @method = ] 'method'` +`[ @method = ] 'PUBLISH | REQUEST | REPLY | CANCEL | ADD | REFRESH | COUNTER | DECLINECOUNTER'` Is the method of the calendar event message. The parameter is of type **nvarchar(14)**. The parameter may contain one of the following values: @@ -156,7 +156,7 @@ exec sp_send_calendar_event Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of 'Schedule a Meeting'. -`[ @use_reminder = ] use_reminder` +`[ @use_reminder = ] 1 | 0` Determines whether to add a reminder to the event. The parameter is of type **bit**, with a default of 1 (true). @@ -164,11 +164,11 @@ exec sp_send_calendar_event Is the number of minutes to set for the event reminder. The parameter is of type **int**, with a default of 15. -`[ @require_rsvp = ] require_rsvp` +`[ @require_rsvp = ] 1 | 0` Determines whether participants are required to respond with an RSVP. The parameter is of type **bit**, with a default of 0 (false). If this parameter equals to 0 (false), then all participants are assumed to have accepted their invitation, without requesting a response. -`[ @recipients_role = ] 'recipients_role'` +`[ @recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR'` Is the meeting role for the participants specified in the **@recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: @@ -179,7 +179,7 @@ exec sp_send_calendar_event Defaults to REQ-PARTICIPANT. -`[ @copy_recipients_role = ] 'copy_recipients_role'` +`[ @copy_recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR'` Is the meeting role for the participants specified in the **@copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: @@ -190,7 +190,7 @@ Defaults to REQ-PARTICIPANT. Defaults to OPT-PARTICIPANT. -`[ @blind_copy_recipients_role = ] 'blind_copy_recipients_role'` +`[ @blind_copy_recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR'` Is the meeting role for the participants specified in the **@blind_copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: @@ -209,30 +209,30 @@ Defaults to NON-PARTICIPANT. Is the SMTP server port to be used for sending the e-mail message. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **int**. If no parameter is specified, and no mail profile was used, the default is 25. -`[ @enable_ssl = ] enable_ssl` +`[ @enable_ssl = ] 1 | 0` Determines whether the SMTP server should use SSL authentication. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **bit**. If no parameter is specified, and no mail profile was used, the default is 0 (false). -`[ @use_default_credentials = ] use_default_credentials` +`[ @use_default_credentials = ] 1 | 0` Determines whether the SMTP server should use its default network credentials. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **bit**. If no parameter is specified, and no mail profile was used, the default is 0 (false). If **@username** is specified, this parameter is ignored. -`[ @username = ] username` +`[ @username = ] 'username'` Is the userame to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(255)**. If no parameter is specified, and no mail profile was used, the default is to use the server's default network credentials instead. -`[ @password = ] password` +`[ @password = ] 'password'` Is the password to be used when authenticating with the SMTP server. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(255)**. If no parameter is specified, the default is to use an empty string for the password. | **NOTE:** Unfortunately, since MSDB doesn't allow access to the mail profile passwords, it's impossible to utilize an existing mail profile for getting the password for an SMTP server. Therefore, unless you want to use an empty password or default network credentials, *you must specify a value for this parameter*. | | --- | -`[ @suppress_info_messages = ] suppress_info_messages` +`[ @suppress_info_messages = ] 1 | 0` Determines whether to *NOT* display the success message after sending the e-mail. The parameter is of type **bit**, with a default of 0 (false). -`[ @event_identifier = ] event_identifier [ OUTPUT ]` +`[ @event_identifier = ] 'event_identifier' [ OUTPUT ]` Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(255)**. @@ -244,7 +244,7 @@ Defaults to NON-PARTICIPANT. ## Remarks -I did my best to align the parameters of this procedure with Microsoft's **sp_send_dbmail** procedure. Unfortunately, since this is a CLR procedure, there are limitations to what can be done. Specifically, it's impossible to define default values for parameters of type **nvarchar(max)** and **varchar(max)**, and so I had to create a wrapper procedure in T-SQL instead. +I did my best to align the parameters of this procedure with Microsoft's **sp_send_dbmail** procedure. However, since this is a CLR procedure, there are limitations to what can be done. Specifically, it's impossible to define default values for parameters of type **nvarchar(max)** and **varchar(max)**, and so I had to create a wrapper procedure in T-SQL instead. Even though I tried to utilize Microsoft's Database Mail Profile mechanics, I couldn't get access to the account passwords (which is probably a good thing), and so the **@password** parameter becomes mandatory (unless you want to use an empty password or the server's default network credentials). From 7c9fad69c0831d0f5d2e672484c8fbd5cb915aa7 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 15:07:54 +0300 Subject: [PATCH 20/27] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ddc5604..fb7c2a1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# sql_clr_ics: clr_send_ics_invite, sp_send_calendar_event +# sp_send_calendar_event Send Calendar Event / Appointment Invitations (iCal formatted file) from within SQL Server using a CLR stored procedure @@ -43,7 +43,7 @@ exec sp_send_calendar_event [ , [ @smtp_servername = ] 'smtp_servername' ] [ , [ @port = ] port ] [ , [ @enable_ssl = ] 1 | 0 ] - [ , [ @use_default_credentials = ] use_default_credentials ] + [ , [ @use_default_credentials = ] 1 | 0 ] [ , [ @username = ] 'username' ] [ , [ @password = ] 'password' ] [ , [ @suppress_info_messages = ] 1 | 0 ] From b5b131e974a4a5dd1bef89c7720ef7b00c937f35 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sat, 25 May 2019 15:11:11 +0300 Subject: [PATCH 21/27] replaced clr method with t-sql method --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fb7c2a1..327566a 100644 --- a/README.md +++ b/README.md @@ -54,19 +54,19 @@ exec sp_send_calendar_event `[ @profile_name = ] 'profile_name'` - Is the name of the profile to send the message from. The *profile_name* is of type **sysname**, with a default of NULL. The *profile_name* must be the name of an existing Database Mail profile. When no *profile_name* is specified, **clr_send_ics_invite** checks whether **@from_address** was specified. If not, it uses the default public profile for the **msdb** database. If **@from_address** wasn't specified, and there is no default public profile for the database, **@profile_name** must be specified. + Is the name of the profile to send the message from. The *profile_name* is of type **sysname**, with a default of NULL. The *profile_name* must be the name of an existing Database Mail profile. When no *profile_name* is specified, **sp_send_calendar_event** checks whether **@from_address** was specified. If not, it uses the default public profile for the **msdb** database. If **@from_address** wasn't specified, and there is no default public profile for the database, **@profile_name** must be specified. `[ @recipients = ] 'recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. `[ @copy_recipients = ] 'copy_recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. `[ @blind_copy_recipients = ] 'blind_copy_recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **clr_send_ics_invite** returns an error. + Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. `[ @from_address = ] 'from_address'` @@ -257,7 +257,7 @@ I also didn't implement any functionality involving multiple accounts per profil ``` DECLARE @EventID nvarchar(255) -EXEC clr_send_ics_invite +EXEC sp_send_calendar_event @from_address = N'the_organizer@gmail.com', @recipients = N'someone@gmail.com,otherguy@outlook.com', @subject = N'let us meet for pizza!', @@ -283,7 +283,7 @@ SELECT EventID = @EventID ### B. Cancel the previously sent invitation ``` -EXEC clr_send_ics_invite +EXEC sp_send_calendar_event @from_address = N'the_organizer@gmail.com', @recipients = N'someone@gmail.com,otherguy@outlook.com', @subject = N'let us meet for pizza!', @@ -310,7 +310,7 @@ SELECT EventID = @EventID ``` DECLARE @EventID nvarchar(255) -EXEC clr_send_ics_invite +EXEC sp_send_calendar_event @from_address = N'sla_bot@company.com', @recipients = N'employee1@company.com,employee2@company.com', @subject = N'Weekly SLA Shift', From 8145d32023091b80b9ad81f08594a48b62317484 Mon Sep 17 00:00:00 2001 From: "eitan.blumin" Date: Sun, 26 May 2019 09:53:03 +0300 Subject: [PATCH 22/27] removed custom procedure, added optional ics_contents parameter. closed #8 --- sql_clr_ics/clr_send_ics_invite.cs | 294 +++++++------------------ sql_clr_ics/sp_send_calendar_event.sql | 5 +- sql_clr_ics/sql_clr_ics_install.sql | 55 +++-- 3 files changed, 125 insertions(+), 229 deletions(-) diff --git a/sql_clr_ics/clr_send_ics_invite.cs b/sql_clr_ics/clr_send_ics_invite.cs index 7bff259..71ba983 100644 --- a/sql_clr_ics/clr_send_ics_invite.cs +++ b/sql_clr_ics/clr_send_ics_invite.cs @@ -45,7 +45,7 @@ SqlString profile_name , SqlString smtp_servername, SqlInt32 port, SqlBoolean enable_ssl , SqlBoolean use_default_credentials, SqlString username, SqlString password , SqlBoolean suppress_info_messages - , ref SqlString event_identifier + , ref SqlString event_identifier, ref SqlString ics_contents ) { #region local variable declaration @@ -214,213 +214,6 @@ INNER JOIN [msdb].[dbo].[sysmail_server] AS s #endregion validations - #region initialize recipients using faux mail message - - MailMessage msg = new MailMessage(); - - try - { - msg.From = new MailAddress(from_address.Value); - } - catch (Exception e) - { - throw new Exception("@from_address is invalid: " + e.Message); - } - - try - { - if (!reply_to.IsNull && !string.IsNullOrEmpty(reply_to.Value)) msg.ReplyToList.Add(reply_to.Value.Replace(';', ',')); - } - catch (Exception e) - { - throw new Exception("@reply_to is invalid: " + e.Message); - } - - try - { - msg.To.Add(recipients.Value.Replace(';', ',')); - } - catch (Exception e) - { - throw new Exception("@recipients is invalid: " + e.Message); - } - - try - { - if (!copy_recipients.IsNull && !string.IsNullOrEmpty(copy_recipients.Value)) msg.CC.Add(copy_recipients.Value.Replace(';', ',')); - } - catch (Exception e) - { - throw new Exception("@copy_recipients is invalid: " + e.Message); - } - - try - { - if (!blind_copy_recipients.IsNull && !string.IsNullOrEmpty(blind_copy_recipients.Value)) msg.Bcc.Add(blind_copy_recipients.Value.Replace(';', ',')); - } - catch (Exception e) - { - throw new Exception("@blind_copy_recipients is invalid: " + e.Message); - } - - #endregion initialize recipients using faux mail message - - #region construct ICS file contents - - StringBuilder ics_contents = new StringBuilder(); - ics_contents.AppendLine("BEGIN:VCALENDAR"); - ics_contents.AppendLine(string.Format("PRODID:-//{0}", prod_id.Value)); - ics_contents.AppendLine("VERSION:2.0"); - ics_contents.AppendLine(string.Format("METHOD:{0}", method.Value.ToUpper())); - ics_contents.AppendLine(string.Format("SEQUENCE:{0}", sequence.Value)); - - ics_contents.AppendLine("BEGIN:VEVENT"); - ics_contents.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", start_time_utc.Value)); - ics_contents.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", timestamp_utc.Value)); - ics_contents.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", end_time_utc.Value)); - if (!location.IsNull) ics_contents.AppendLine("LOCATION: " + location.Value); - ics_contents.AppendLine(string.Format("UID:{0}", event_identifier.Value)); - ics_contents.AppendLine(string.Format("DESCRIPTION:{0}", body.Value)); - ics_contents.AppendLine(string.Format("X-ALT-DESC;FMTTYPE={0}:{1}", body_format.Value == "HTML" ? "text/html" : "text/plain", body.Value)); - ics_contents.AppendLine(string.Format("SUMMARY:{0}", subject.Value)); - ics_contents.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); - ics_contents.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); - - switch (mailPriority) - { - case MailPriority.Normal: - ics_contents.AppendLine("PRIORITY:5"); - break; - case MailPriority.Low: - ics_contents.AppendLine("PRIORITY:9"); - break; - case MailPriority.High: - ics_contents.AppendLine("PRIORITY:1"); - break; - default: - break; - } - - string rsvp_string = (require_rsvp.Value ? "PARTSTAT=NEEDS-ACTION;RSVP=TRUE" : "PARTSTAT=ACCEPTED;RSVP=FALSE"); - bool organizer_in_recipients = false; - - foreach (MailAddress addr in msg.To) - { - if (addr.Address == msg.From.Address) organizer_in_recipients = true; - ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, recipients_role.Value.ToUpper())); - } - - foreach (MailAddress addr in msg.CC) - { - if (addr.Address == msg.From.Address) organizer_in_recipients = true; - ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, copy_recipients_role.Value.ToUpper())); - } - - foreach (MailAddress addr in msg.Bcc) - { - if (addr.Address == msg.From.Address) organizer_in_recipients = true; - ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, blind_copy_recipients_role.Value.ToUpper())); - } - - if (!organizer_in_recipients) - { - msg.Bcc.Add(msg.From); - ics_contents.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); - } - - if (use_reminder && method.Value != "CANCEL") - { - ics_contents.AppendLine("BEGIN:VALARM"); - ics_contents.AppendLine(string.Format("TRIGGER:-PT{0}M", reminder_minutes.Value)); - ics_contents.AppendLine("ACTION:DISPLAY"); - ics_contents.AppendLine("DESCRIPTION:Reminder"); - ics_contents.AppendLine("END:VALARM"); - } - - ics_contents.AppendLine("END:VEVENT"); - ics_contents.AppendLine("END:VCALENDAR"); - - #endregion construct ICS file contents - - #region send mail - - try - { - clr_send_ics_invite_custom(recipients, copy_recipients, blind_copy_recipients, from_address, reply_to, subject, body, body_format, importance, file_attachments, new SqlString(ics_contents.ToString()), method, smtp_servername, port, enable_ssl, use_default_credentials, username, password); - if (!suppress_info_messages) - SqlContext.Pipe.Send(string.Format("Mail Sent. Event Identifier: {0}", event_identifier.Value)); - } - catch (Exception e) - { - throw; - } - - #endregion send mail - } - - [SqlProcedure] - public static void clr_send_ics_invite_custom( - SqlString recipients, SqlString copy_recipients, SqlString blind_copy_recipients - , SqlString from_address, SqlString reply_to - , SqlString subject, SqlString body, SqlString body_format - , SqlString importance, SqlString file_attachments - , SqlString ics_contents, SqlString method - , SqlString smtp_servername, SqlInt32 port, SqlBoolean enable_ssl - , SqlBoolean use_default_credentials, SqlString username, SqlString password - ) - { - - #region local variable declaration - - ICredentialsByHost credentials = CredentialCache.DefaultNetworkCredentials; - MailPriority mailPriority; - - #endregion local variable declaration - - #region default values initialization - - if (subject.IsNull || string.IsNullOrEmpty(subject.Value)) subject = "SQL Server Meeting"; - if (body_format.IsNull || string.IsNullOrEmpty(body_format.Value)) body_format = "TEXT"; - if (importance.IsNull || string.IsNullOrEmpty(importance.Value)) importance = "Normal"; - - if (smtp_servername.IsNull || string.IsNullOrEmpty(smtp_servername.Value)) smtp_servername = "localhost"; - if (port.IsNull) port = 25; - if (enable_ssl.IsNull) enable_ssl = false; - - if (username.IsNull || string.IsNullOrEmpty(username.Value)) - { - use_default_credentials = true; - } - else - { - if (password.IsNull || string.IsNullOrEmpty(password.Value)) password = ""; - credentials = new NetworkCredential(username.Value, password.Value); - } - - if (method.IsNull) method = "REQUEST"; - - #endregion default values initialization - - #region validations - - StringBuilder sb_Errors = new StringBuilder(); - - if (from_address.IsNull || string.IsNullOrEmpty(from_address.Value)) sb_Errors.AppendLine("Missing sender: Please specify @from_address"); - if ( - (recipients.IsNull || string.IsNullOrEmpty(recipients.Value)) - && (copy_recipients.IsNull || string.IsNullOrEmpty(copy_recipients.Value)) - && (blind_copy_recipients.IsNull || string.IsNullOrEmpty(blind_copy_recipients.Value)) - ) - sb_Errors.AppendLine("Missing recipients: Please specify either @recipients, @copy_recipients or @blind_copy_recipients"); - - if (body_format.Value != "HTML" && body_format.Value != "TEXT") sb_Errors.AppendLine(string.Format("@body_format {0} is invalid. Valid values: TEXT, HTML", body_format.Value)); - if (!Enum.TryParse(method.Value, true, out iCalMethods method_enumvalue)) sb_Errors.AppendLine(string.Format("@method {0} is invalid. Valid values: {1}", method.Value, Enum.GetNames(typeof(iCalMethods)).ToString().ToUpper())); - if (!Enum.TryParse(importance.Value, true, out mailPriority)) sb_Errors.AppendLine(string.Format("@importance {0} is invalid. Valid values: {1}", importance.Value, Enum.GetNames(typeof(MailPriority)).ToString().ToUpper())); - - if (sb_Errors.Length > 0) throw new Exception("Unable to send mail due to validation error(s): " + sb_Errors); - - #endregion validations - #region initialize MailMessage and recipients MailMessage msg = new MailMessage(); @@ -491,6 +284,88 @@ public static void clr_send_ics_invite_custom( #endregion initialize MailMessage and recipients + #region construct ICS file contents + + if (ics_contents.IsNull) + { + StringBuilder ics_contents_str = new StringBuilder(); + ics_contents_str.AppendLine("BEGIN:VCALENDAR"); + ics_contents_str.AppendLine(string.Format("PRODID:-//{0}", prod_id.Value)); + ics_contents_str.AppendLine("VERSION:2.0"); + ics_contents_str.AppendLine(string.Format("METHOD:{0}", method.Value.ToUpper())); + ics_contents_str.AppendLine(string.Format("SEQUENCE:{0}", sequence.Value)); + + ics_contents_str.AppendLine("BEGIN:VEVENT"); + ics_contents_str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", start_time_utc.Value)); + ics_contents_str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", timestamp_utc.Value)); + ics_contents_str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", end_time_utc.Value)); + if (!location.IsNull) ics_contents_str.AppendLine("LOCATION: " + location.Value); + ics_contents_str.AppendLine(string.Format("UID:{0}", event_identifier.Value)); + ics_contents_str.AppendLine(string.Format("DESCRIPTION:{0}", body.Value)); + ics_contents_str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE={0}:{1}", body_format.Value == "HTML" ? "text/html" : "text/plain", body.Value)); + ics_contents_str.AppendLine(string.Format("SUMMARY:{0}", subject.Value)); + ics_contents_str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); + ics_contents_str.AppendLine(string.Format("CLASS:{0}", sensitivity.Value.ToUpper())); + + switch (mailPriority) + { + case MailPriority.Normal: + ics_contents_str.AppendLine("PRIORITY:5"); + break; + case MailPriority.Low: + ics_contents_str.AppendLine("PRIORITY:9"); + break; + case MailPriority.High: + ics_contents_str.AppendLine("PRIORITY:1"); + break; + default: + break; + } + + string rsvp_string = (require_rsvp.Value ? "PARTSTAT=NEEDS-ACTION;RSVP=TRUE" : "PARTSTAT=ACCEPTED;RSVP=FALSE"); + bool organizer_in_recipients = false; + + foreach (MailAddress addr in msg.To) + { + if (addr.Address == msg.From.Address) organizer_in_recipients = true; + ics_contents_str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, recipients_role.Value.ToUpper())); + } + + foreach (MailAddress addr in msg.CC) + { + if (addr.Address == msg.From.Address) organizer_in_recipients = true; + ics_contents_str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, copy_recipients_role.Value.ToUpper())); + } + + foreach (MailAddress addr in msg.Bcc) + { + if (addr.Address == msg.From.Address) organizer_in_recipients = true; + ics_contents_str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE={3};{2};CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", addr.DisplayName, addr.Address, rsvp_string, blind_copy_recipients_role.Value.ToUpper())); + } + + if (!organizer_in_recipients) + { + msg.Bcc.Add(msg.From); + ics_contents_str.AppendLine(string.Format("ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=NON-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=FALSE;CN=\"{0}\";X-NUM-GUESTS=0:mailto:{1}", msg.From.DisplayName, msg.From.Address)); + } + + if (use_reminder && method.Value != "CANCEL") + { + ics_contents_str.AppendLine("BEGIN:VALARM"); + ics_contents_str.AppendLine(string.Format("TRIGGER:-PT{0}M", reminder_minutes.Value)); + ics_contents_str.AppendLine("ACTION:DISPLAY"); + ics_contents_str.AppendLine("DESCRIPTION:Reminder"); + ics_contents_str.AppendLine("END:VALARM"); + } + + ics_contents_str.AppendLine("END:VEVENT"); + ics_contents_str.AppendLine("END:VCALENDAR"); + + ics_contents = ics_contents_str.ToString(); + } + + #endregion construct ICS file contents + #region initialize and configure SmtpClient SmtpClient smtpclient = new SmtpClient(); @@ -504,7 +379,6 @@ public static void clr_send_ics_invite_custom( smtpclient.Credentials = credentials; System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar"); contype.Parameters.Add("method", "REQUEST"); - //contype.Parameters.Add("method", method.Value.ToUpper()); contype.Parameters.Add("name", "Meeting.ics"); AlternateView avBody = AlternateView.CreateAlternateViewFromString(body.Value, new System.Net.Mime.ContentType(body_format.Value == "HTML" ? "text/html" : "text/plain")); @@ -526,6 +400,8 @@ public static void clr_send_ics_invite_custom( try { smtpclient.Send(msg); + if (!suppress_info_messages) + SqlContext.Pipe.Send(string.Format("Mail Sent. Event Identifier: {0}", event_identifier.Value)); } catch (Exception e) { diff --git a/sql_clr_ics/sp_send_calendar_event.sql b/sql_clr_ics/sp_send_calendar_event.sql index fb5099b..1ad7050 100644 --- a/sql_clr_ics/sp_send_calendar_event.sql +++ b/sql_clr_ics/sp_send_calendar_event.sql @@ -40,8 +40,9 @@ CREATE PROCEDURE [dbo].[sp_send_calendar_event] @username [nvarchar](255) = NULL, @password [nvarchar](255) = NULL, @suppress_info_messages [bit] = 0, - @event_identifier [nvarchar](255) = NULL OUTPUT + @event_identifier [nvarchar](255) = NULL OUTPUT, + @ics_contents [nvarchar](MAX) = NULL OUTPUT WITH EXECUTE AS CALLER AS SET NOCOUNT ON; -EXEC dbo.[clr_send_ics_invite] @profile_name, @recipients, @copy_recipients, @blind_copy_recipients, @from_address, @reply_to, @subject, @body, @body_format, @importance, @sensitivity, @file_attachments, @location, @start_time_utc, @end_time_utc, @timestamp_utc, @method, @sequence, @prod_id, @use_reminder, @reminder_minutes, @require_rsvp, @recipients_role, @copy_recipients_role, @blind_copy_recipients_role, @smtp_servername, @port, @enable_ssl, @use_default_credentials, @username, @password, @suppress_info_messages, @event_identifier OUTPUT +EXEC dbo.[clr_send_ics_invite] @profile_name, @recipients, @copy_recipients, @blind_copy_recipients, @from_address, @reply_to, @subject, @body, @body_format, @importance, @sensitivity, @file_attachments, @location, @start_time_utc, @end_time_utc, @timestamp_utc, @method, @sequence, @prod_id, @use_reminder, @reminder_minutes, @require_rsvp, @recipients_role, @copy_recipients_role, @blind_copy_recipients_role, @smtp_servername, @port, @enable_ssl, @use_default_credentials, @username, @password, @suppress_info_messages, @event_identifier OUTPUT, @ics_contents OUTPUT diff --git a/sql_clr_ics/sql_clr_ics_install.sql b/sql_clr_ics/sql_clr_ics_install.sql index d5653df..7f20f47 100644 --- a/sql_clr_ics/sql_clr_ics_install.sql +++ b/sql_clr_ics/sql_clr_ics_install.sql @@ -46,6 +46,8 @@ BEGIN END END GO +IF OBJECT_ID('sp_send_calendar_event') IS NOT NULL DROP PROCEDURE [dbo].[sp_send_calendar_event] +GO IF OBJECT_ID('clr_send_ics_invite') IS NOT NULL DROP PROCEDURE [dbo].[clr_send_ics_invite] GO IF EXISTS (SELECT * FROM sys.assemblies WHERE name = 'sql_clr_ics') DROP ASSEMBLY [sql_clr_ics]; @@ -54,54 +56,71 @@ PRINT N'Creating Assembly [dbo].[sql_clr_ics]...'; GO CREATE ASSEMBLY [sql_clr_ics] AUTHORIZATION [dbo] - FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01030008AFE65C0000000000000000E00022200B013000003E00000008000000000000825C000000200000006000000000001000200000000200000400000000000000060000000000000000A000000002000000000000030060850000100000100000000010000010000000000000100000000000000000000000305C00004F000000006000000404000000000000000000000000000000000000008000000C000000F85A00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000883C000000200000003E000000020000000000000000000000000000200000602E7273726300000004040000006000000006000000400000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000004600000000000000000000000000004000004200000000000000000000000000000000645C0000000000004800000002000500883200007028000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B300600B71000000100001100280E00000A0A0F04280F00000A2D1E0F1D280F00000A2C090F1C281000000A2D0C0F00280F00000A16FE012B0117130D110D39F5010000007201000070731100000A130E110E6F1200000A130F110E6F1300000A000F00280F00000A131011102C6900110F72310000706F1400000A00110F6F1500000A13110011116F1600000A16FE01131211122C1C0011116F1700000A00110E6F1800000A00728A010070731900000A7A001111166F1A00000A10000011116F1700000A0000DE0D11112C0811116F1B00000A00DC00110F72FA0100706F1400000A00110F6F1C00000A72EB050070178C2B0000016F1D00000A26110F6F1C00000A72F50500700F00281E00000A6F1D00000A26110F6F1500000A13130011136F1600000A16FE01131411142C280011136F1700000A00110E6F1800000A0072070600700F00281E00000A281F00000A731900000A7A000F04280F00000A131511152C0A1113166F1A00000A10040F05280F00000A131611162C0A1113176F1A00000A10050F19280F00000A131711172C0A1113186F1A00000A10190F1A282000000A131811182C0A1113196F2100000A101A0F1B281000000A131911192C0A11131A6F2200000A101B0F1C281000000A131A111A2C1811131B6F2200000A131B121B282300000A282400000A101C0F1D280F00000A2C0C0F1C282300000A16FE012B0116131C111C2C0A11131C6F1A00000A101D0011136F1700000A0000DE0D11132C0811136F1B00000A00DC110E6F1800000A00000F06280F00000A2D0E0F06281E00000A282500000A2B0117131D111D2C0C7241060070282600000A10060F08280F00000A2D0E0F08281E00000A282500000A2B0117131E111E2C0C7267060070282600000A10080F0F282700000A131F111F2C0C282800000A282900000A100F0F0D282700000A132011202C200F0F282A00000A13211221230000000000C07240282B00000A282900000A100D0F0E282700000A132211222C200F0D282A00000A13211221230000000000004E40282B00000A282900000A100E0F14282000000A132311232C091F0F282C00000A10140F13281000000A132411242C0817282400000A10130F1F281000000A132511252C0816282400000A101F0F12280F00000A2D0E0F12281E00000A282500000A2B0117132611262C0C7271060070282600000A10120F09280F00000A2D0E0F09281E00000A282500000A2B0117132711272C0C7297060070282600000A10090F0A280F00000A2D0E0F0A281E00000A282500000A2B0117132811282C0C72A5060070282600000A100A0F19280F00000A2D0E0F19281E00000A282500000A2B0117132911292C0C72B3060070282600000A10190F1A282000000A132A112A2C091F19282C00000A101A0F1B281000000A132B112B2C0816282400000A101B0F1D280F00000A2D0E0F1D281E00000A282500000A2B0117132C112C2C0C0017282400000A101C002B40000F1E280F00000A2D0E0F1E281E00000A282500000A2B0117132D112D2C0C72C7060070282600000A101E0F1D281E00000A0F1E281E00000A732D00000A0A000F16280F00000A132E112E2C0C72C9060070282600000A10160F17280F00000A132F112F2C0C72E9060070282600000A10170F18280F00000A133011302C0C7209070070282600000A10180F10280F00000A133111312C0C7229070070282600000A10100F11282000000A133211322C1E0F10281E00000A7239070070282E00000A2D03162B0117282C00000A10110E20280F00000A133311332C200E20282F00000A13341234FE161D0000016F3000000A282600000A8110000001733100000A0C0F04280F00000A2D0E0F04281E00000A282500000A2B0117133511352C0C0872470700706F3200000A260F01280F00000A2D0E0F01281E00000A282500000A2C310F02280F00000A2D0E0F02281E00000A282500000A2C1A0F03280F00000A2D0E0F03281E00000A282500000A2B01172B0116133611362C0C0872A10700706F3200000A260F08281E00000A7266080070283300000A2C130F08281E00000A7267060070283300000A2B0116133711372C180872700800700F08281E00000A281F00000A6F3200000A260F10281E00000A171203280100002B16FE01133811382C310872DC0800700F10281E00000AD003000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F0A281E00000A171204280200002B16FE01133911392C310872300900700F0A281E00000AD004000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F09281E00000A171201280300002B16FE01133A113A2C3108728C0900700F09281E00000AD015000001283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A26161305161306161307007E01000004133B16133C388F000000113B113C9A133D000F01280F00000A2D10113D0F16281E00000A282E00000A2B0116133E113E2C0500171305000F02280F00000A2D10113D0F17281E00000A282E00000A2B0116133F113F2C0500171306000F03280F00000A2D10113D0F18281E00000A282E00000A2B0116134011402C050017130700110511065F11075F134111412C03002B1200113C1758133C113C113B8E693F66FFFFFF0F01280F00000A2D07110516FE012B0116134211422C220872E80900700F16281E00000A7E010000046F3000000A283800000A6F3200000A260F02280F00000A2D07110616FE012B0116134311432C2208724E0A00700F17281E00000A7E010000046F3000000A283800000A6F3200000A260F03280F00000A2D07110716FE012B0116134411442C220872BE0A00700F18281E00000A7E010000046F3000000A283800000A6F3200000A26086F3900000A16FE02134511452C11723A0B007008283A00000A731900000A7A733B00000A130811080F06281E00000A6F3C00000A0011080F07281E00000A6F3D00000A001108076F3E00000A0011080F08281E00000A7266080070282E00000A6F3F00000A000F0B280F00000A16FE01134611462C6C00000F0B281E00000A178D3000000125161F3B9D6F4000000A13471613482B43114711489A1349000011086F4100000A1149734200000A6F4300000A0000DE1C134A00729C0B00701149114A6F4400000A283800000A731900000A7A00114817581348114811478E6932B500000011080F04281E00000A734500000A6F4600000A0000DE1A134B0072D40B0070114B6F4400000A284700000A731900000A7A00000F05280F00000A2D110F05281E00000A282500000A16FE012B0116134C114C2C1D11086F4800000A0F05281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134D00720A0C0070114D6F4400000A284700000A731900000A7A000011086F4B00000A0F01281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134E0072380C0070114E6F4400000A284700000A731900000A7A00000F02280F00000A2D110F02281E00000A282500000A16FE012B0116134F114F2C1D11086F4C00000A0F02281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A135000726A0C007011506F4400000A284700000A731900000A7A00000F03280F00000A2D110F03281E00000A282500000A16FE012B0116135111512C1D11086F4D00000A0F03281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A13520072A60C007011526F4400000A284700000A731900000A7A733100000A1309110972EE0C00706F3200000A261109720E0D00700F12281E00000A281F00000A6F3200000A261109722A0D00706F3200000A26110972420D00700F10281E00000A6F3700000A281F00000A6F3200000A26110972580D00700F11284E00000A8C2B000001281F00000A6F3200000A26110972720D00706F3200000A261109728C0D00700F0D282A00000A8C1C000001281F00000A6F3200000A26110972C60D00700F0F282A00000A8C1C000001281F00000A6F3200000A26110972000E00700F0E282A00000A8C1C000001281F00000A6F3200000A260F0C280F00000A16FE01135311532C19110972360E00700F0C281E00000A284700000A6F3200000A261109724C0E00700E20281E00000A281F00000A6F3200000A261109725C0E007011086F4F00000A281F00000A6F3200000A261109727C0E007011086F4F00000A281F00000A6F3200000A26110972BE0E007011086F5000000A281F00000A6F3200000A26110972D60E007011086F5100000A6F5200000A281F00000A6F3200000A26110972000F00700F0A281E00000A6F3700000A281F00000A6F3200000A26071354115445030000000200000011000000200000002B2D110972140F00706F3200000A262B201109722A0F00706F3200000A262B11110972400F00706F3200000A262B022B000F15282300000A2D0772560F00702B0572900F0070130A16130B0011086F4B00000A6F5300000A13552B6C11556F5400000A13560011566F5200000A11086F5100000A6F5200000A282E00000A135711572C0317130B110972D00F00701A8D0E000001251611566F5500000AA2251711566F5200000AA22518110AA225190F16281E00000A6F3700000AA2285600000A6F3200000A260011556F5700000A2D8BDE0D11552C0811556F1B00000A00DC0011086F4C00000A6F5300000A13582B6C11586F5400000A13590011596F5200000A11086F5100000A6F5200000A282E00000A135A115A2C0317130B110972D00F00701A8D0E000001251611596F5500000AA2251711596F5200000AA22518110AA225190F17281E00000A6F3700000AA2285600000A6F3200000A260011586F5700000A2D8BDE0D11582C0811586F1B00000A00DC0011086F4D00000A6F5300000A135B2B6C115B6F5400000A135C00115C6F5200000A11086F5100000A6F5200000A282E00000A135D115D2C0317130B110972D00F00701A8D0E0000012516115C6F5500000AA22517115C6F5200000AA22518110AA225190F18281E00000A6F3700000AA2285600000A6F3200000A2600115B6F5700000A2D8BDE0D115B2C08115B6F1B00000A00DC110B16FE01135E115E2C400011086F4D00000A11086F5100000A6F5800000A001109726710007011086F5100000A6F5500000A11086F5100000A6F5200000A283800000A6F3200000A26000E13131B111B285900000A2D1F111B0F10281E00000A7239070070283300000A282400000A285A00000A2B02111B285B00000A135F115F2C5400110972481100706F3200000A26110972621100700F14284E00000A8C2B000001281F00000A6F3200000A26110972821100706F3200000A26110972A01100706F3200000A26110972CA1100706F3200000A2600110972E01100706F3200000A26110972F61100706F3200000A26735C00000A130C00110C0F19281E00000A6F5D00000A00110C0F1A284E00000A6F5E00000A00110C0F1C282300000A6F5F00000A00110C0F1B282300000A6F6000000A00110C066F6100000A007212120070736200000A136011606F6300000A722E1200700F10281E00000A6F3700000A6F6400000A0011606F6300000A723C12007072461200706F6400000A000F07281E00000A725E120070736200000A286500000A136111086F6600000A11616F6700000A0011096F3000000A1160286500000A136211086F6600000A11626F6700000A0011086F6800000A7272120070728E1200706F6900000A0000DE1A13630072D612007011636F4400000A284700000A731900000A7A0000110C11086F6A00000A000E1F286B00000A285B00000A136411642C1C286C00000A721A1300700E20281E00000A281F00000A6F6D00000A0000DE1A136500725C13007011656F4400000A284700000A731900000A7A2A00413C0100020000007A00000044000000BE0000000D00000000000000020000001301000004010000170200000D0000000000000000000000D508000018000000ED0800001C0000001E000001000000001A09000018000000320900001A0000001E000001000000004D090000420000008F0900001A0000001E00000100000000AA09000021000000CB0900001A0000001E00000100000000E609000042000000280A00001A0000001E00000100000000430A000042000000850A00001A0000001E00000102000000B50C0000790000002E0D00000D00000000000000020000004A0D000079000000C30D00000D0000000000000002000000DF0D000079000000580E00000D00000000000000000000005E0F0000E7000000451000001A0000001E00000100000000601000003C0000009C1000001A0000001E0000012202286E00000A002AB21A8D2D000001251672C9060070A2251772E9060070A225187209070070A225197286130070A280010000042A000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000CC060000237E000038070000380A000023537472696E67730000000070110000941300002355530004250000100000002347554944000000142500005C03000023426C6F620000000000000002000001571D0208090A000000FA013300160000010000003A000000040000000E00000003000000210000006E0000000B0000000D0000000100000004000000010000000300000002000000030000000000AD0401000000000006008303DB060600F003DB060600CE02BC060F000C0700000600E2022A05060066032A05060047032A050600D7032A050600A3032A050600BC032A0506000F032A0506002A032A050600AC02FB060600B408F0040A00F9026E060A00300445070A00440245070A001F0045070A00110545070E006509DB080E00100A9D0406002D0681090E0097019D040E000E099D040A00B705F8080A004F01F8080A001106F80806004702F00406002401F0040600C505F00406000E00B1000E002B089D040E006C0234020E00A8099D0406000905F0040E00A301DB080E006C04DB080A00AA05CF050A003701CF050A000406CF050600B301F0040A005005F80806002200F0040A006106F80806005A04F00406007302F0040600BF01F0040600FF05F0040E007D059D040E0019099D04060001007E040E0067059D0406008906E7070E00D809FA000E0092059D040E003C05FA000A009D096E060A0064026E060000000028000000000001000100010010005A07000039000100010003010000CF0600008D000200040003010000150800008D000B000400110032075F0206068C00630256805300660256807E00660256808600660256806800660256803F00660256804B00660256807600660256806F00660206068C006302568038006A02568043006A0256805B006A02502000000000960098026E0201005032000000008618A306060022005932000000009118A906B5022200000001000E02000002004F08000003004A0800000400440800000500370800000600E90500000700D30800000800D30900000900A80800000A00770100000B001D0A00000C006A0800000D00210500000E00D90000000F00CC0000001000E800000011005F01000012008201000013001901000014003B0600001500760700001600F20500001700EE0100001800E90100001900E30100001A00240200001B00470900001C00E50400001D00CF0700001E001B0200001F006601000020001B070000210048060900A30601001100A30606001900A3060A002900A30610003100A30610003900A30610004100A30610004900A30610005100A30610005900A30610006100A30610006900A30610007900A306060021019707B7008100BD04BD009900BD04BD00C900A3061000C9004101C10031011C05060039018D091000D1001F06C60041018E08BD00410181020600310181020600F100A3061000D9002D04CB00490187020600D1000608D10051011804D70081000E04DF006901A108E3009100BD04BD00D9001C00E900D9000E05EF0099000E04BD009900E608F5006901290AFB008100E60800018900BD04BD00E100B60906018900E6080B0189000E041201E1006B0717019100E6081D012901A30623016901E9092901E90021012F0171005804DF00B100A3060600B100500234016901F509290119018F023A017101D101490119013C07520169015906DF006901A1085A01B10061046B0169019A086F01B900A3060600B900C7081000B900CA091000B900030A7501B900C8047B016901F2088001B9005A0887019101A30610000C00F6009601F1008B01DF000101A3061000B90000059C0169019A08A301B9004C09A90169016F01AF01A101F6001000B900E205A901B9003100A901B900A900A90191000E046B01B900C109DF00B900BB08DF00B900F704B50101011F08DF0014009506C4011C002409D5010101FE01DF006901A108DA01A9017809BD001400F600960199007802E10199002901E70199002504E101C100A3060600C1005C091000C1003E090100C100B5077B01C100D7047B01C1008707F0010901A306100009010608F601B101F600230111013A04FC01B9007B0806022400F6009601B900FA071502C101F6002301C1005A011B02990030092102C9015B022802D1015A0110007100A306060008000C003702080010003C0208001400410208001800460208001C004B02080020005002080024005502080028005A02080030003702080034003C0208003800410220006B003C022E000B00B9022E001300C2022E001B00E1022E002300EA022E002B00FB022E0033002B032E003B0031032E004300EA022E004B0031032E00530031032E005B0043032E006300500315008D01BB01CD010C02048000000100000000000000000000000000B00600000400000000000000000000002E02A000000000000400000000000000000000002E029400000000000400000000000000000000002E02F004000000000300020004000200690044016900610169006601000000436F6C6C656374696F6E60310049456E756D657261746F7260310047657453716C496E743332003C4D6F64756C653E006765745F4343005055424C49430041444400505249564154450052454652455348005055424C49534800434F4E464944454E5449414C0043414E43454C004445434C494E45434F554E5445520052455155455354005245504C590076616C75655F5F0053797374656D2E44617461006D73636F726C6962006765745F4263630053797374656D2E436F6C6C656374696F6E732E47656E6572696300656E645F74696D655F7574630073746172745F74696D655F7574630074696D657374616D705F757463004164640053797374656D2E436F6C6C656374696F6E732E5370656369616C697A65640070726F645F6964004E657747756964006F705F42697477697365416E64004462436F6D6D616E6400437265617465436F6D6D616E640053716C436F6D6D616E640053656E64006D6574686F640070617373776F7264005265706C61636500696D706F7274616E63650073657175656E6365006765745F4D657373616765004D61696C4D6573736167650043726564656E7469616C43616368650049446973706F7361626C650052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500626C696E645F636F70795F726563697069656E74735F726F6C65006765745F446973706C61794E616D650070726F66696C655F6E616D6500757365726E616D6500736D74705F7365727665726E616D650053797374656D2E4E65742E4D696D650053716C4461746554696D6500417070656E644C696E65006765745F506970650053716C5069706500436F6E74656E7454797065006F705F46616C736500436C6F736500446973706F736500547279506172736500636C725F73656E645F6963735F696E76697465004E65757472616C5265736F75726365734C616E67756167654174747269627574650044656275676761626C6541747472696275746500417373656D626C795469746C654174747269627574650053716C50726F63656475726541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F56616C7565004164645769746856616C7565006F705F547275650047657453716C537472696E6700437265617465416C7465726E6174655669657746726F6D537472696E6700546F537472696E67006765745F4C656E677468004E6574776F726B43726564656E7469616C0053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C0053797374656D2E4E65742E4D61696C0073716C5F636C725F6963732E646C6C006765745F49734E756C6C007365745F4973426F647948746D6C007365745F456E61626C6553736C00656E61626C655F73736C0053797374656D006765745F46726F6D007365745F46726F6D00456E756D0047657453716C426F6F6C65616E004F70656E006C6F636174696F6E0053797374656D2E5265666C656374696F6E004E616D6556616C7565436F6C6C656374696F6E0053716C506172616D65746572436F6C6C656374696F6E004D61696C41646472657373436F6C6C656374696F6E004174746163686D656E74436F6C6C656374696F6E00416C7465726E61746556696577436F6C6C656374696F6E004462436F6E6E656374696F6E0053716C436F6E6E656374696F6E00457863657074696F6E0053797374656D2E446174612E436F6D6D6F6E006765745F546F007265706C795F746F00726571756972655F727376700043686172004462446174615265616465720053716C44617461526561646572004578656375746552656164657200537472696E674275696C646572007573655F72656D696E646572006576656E745F6964656E74696669657200546F55707065720053716C506172616D65746572004D6963726F736F66742E53716C5365727665722E5365727665720049456E756D657261746F7200476574456E756D657261746F72002E63746F72002E6363746F720073716C5F636C725F6963730053797374656D2E446961676E6F7374696373006943616C4D6574686F64730053797374656D2E52756E74696D652E436F6D70696C657253657276696365730053797374656D2E5265736F757263657300446562756767696E674D6F6465730073757070726573735F696E666F5F6D65737361676573006943616C526F6C6573004765744E616D65730053797374656D2E446174612E53716C54797065730053746F72656450726F63656475726573004164644D696E757465730072656D696E6465725F6D696E75746573007365745F43726564656E7469616C73006765745F44656661756C744E6574776F726B43726564656E7469616C73007365745F55736544656661756C7443726564656E7469616C73007573655F64656661756C745F63726564656E7469616C730053797374656D2E436F6C6C656374696F6E73006765745F48656164657273006765745F506172616D6574657273006943616C436C617373006765745F41646472657373004D61696C416464726573730066726F6D5F6164647265737300626C696E645F636F70795F726563697069656E7473006765745F4174746163686D656E74730066696C655F6174746163686D656E7473006765745F416C7465726E6174655669657773006765745F486173526F777300436F6E63617400466F726D617400626F64795F666F726D6174004F626A656374006765745F5375626A656374007365745F5375626A656374007375626A6563740053797374656D2E4E6574006F705F496D706C696369740053706C69740053797374656D2E446174612E53716C436C69656E7400536D7470436C69656E74004174746163686D656E74006765745F43757272656E74006F705F4C6F676963616C4E6F74007365745F506F727400706F7274006765745F5265706C79546F4C697374007365745F486F7374004943726564656E7469616C734279486F7374004D6F76654E6578740053797374656D2E54657874007365745F436F6D6D616E64546578740053716C436F6E7465787400416C7465726E61746556696577006765745F5574634E6F77006765745F426F6479007365745F426F647900626F647900537472696E6744696374696F6E617279006F705F457175616C697479006F705F496E657175616C697479007365745F5072696F72697479004D61696C5072696F726974790073656E73697469766974790049734E756C6C4F72456D7074790000002F63006F006E007400650078007400200063006F006E006E0065006300740069006F006E003D007400720075006500008157530045004C00450043005400200070002E006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007000720069006E0063006900700061006C00700072006F00660069006C0065005D002000410053002000700070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A004F004E002000700070002E00700072006F00660069006C0065005F006900640020003D00200070002E00700072006F00660069006C0065005F00690064000D000A00570048004500520045002000700070002E00690073005F00640065006600610075006C00740020003D0020003100006F700072006F00660069006C0065005F006E0061006D00650020006E006F0074002000730070006500630069006600690065006400200061006E00640020006E006F002000640065006600610075006C0074002000700072006F00660069006C006500200066006F0075006E0064000083EF530045004C00450043005400200054004F00500020003100200061002E0065006D00610069006C005F0061006400640072006500730073002C00200061002E007200650070006C00790074006F005F0061006400640072006500730073002C00200073002E007300650072007600650072006E0061006D0065002C00200073002E0070006F00720074002C00200073002E0065006E00610062006C0065005F00730073006C002C00200073002E007500730065005F00640065006600610075006C0074005F00630072006500640065006E007400690061006C0073002C00200073002E0075007300650072006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065006100630063006F0075006E0074005D002000410053002000700061000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D002000700061002E00700072006F00660069006C0065005F00690064000D000A0041004E0044002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020003E003D00200040005300650071000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F006100630063006F0075006E0074005D00200041005300200061000D000A004F004E002000700061002E006100630063006F0075006E0074005F006900640020003D00200061002E006100630063006F0075006E0074005F00690064000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007300650072007600650072005D00200041005300200073000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D00200073002E006100630063006F0075006E0074005F00690064000D000A0057004800450052004500200070002E006E0061006D00650020003D0020004000500072006F00660069006C0065000D000A004F0052004400450052002000420059002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020004100530043000009400053006500710000114000500072006F00660069006C0065000039700072006F00660069006C0065005F006E0061006D006500200027007B0030007D00270020006E006F007400200066006F0075006E0064000125530051004C00200053006500720076006500720020004D0065006500740069006E0067000009540045005800540000255300630068006500640075006C0065002000610020004D0065006500740069006E006700000D4E006F0072006D0061006C00000D5000750062006C006900630000136C006F00630061006C0068006F00730074000001001F5200450051002D005000410052005400490043004900500041004E005400011F4F00500054002D005000410052005400490043004900500041004E005400011F4E004F004E002D005000410052005400490043004900500041004E005400010F5200450051005500450053005400000D430041004E00430045004C0000594D0069007300730069006E0067002000730065006E006400650072003A00200050006C0065006100730065002000730070006500630069006600790020004000660072006F006D005F0061006400640072006500730073000080C34D0069007300730069006E006700200072006500630069007000690065006E00740073003A00200050006C0065006100730065002000730070006500630069006600790020006500690074006800650072002000400072006500630069007000690065006E00740073002C002000400063006F00700079005F0072006500630069007000690065006E007400730020006F0072002000400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073000009480054004D004C00006B400062006F00640079005F0066006F0072006D006100740020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A00200054004500580054002C002000480054004D004C00005340006D006500740068006F00640020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B730065006E007300690074006900760069007400790020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B400069006D0070006F007200740061006E006300650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D000065400072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006F400063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00007B400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006155006E00610062006C006500200074006F002000730065006E00640020006D00610069006C002000640075006500200074006F002000760061006C00690064006100740069006F006E0020006500720072006F0072002800730029003A002000003755006E00610062006C006500200074006F002000610074007400610063006800200027007B0030007D0027003A0020007B0031007D0001354000660072006F006D005F006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002D40007200650070006C0079005F0074006F00200069007300200069006E00760061006C00690064003A0020000031400072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000003B400063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A0020000047400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000001F42004500470049004E003A005600430041004C0045004E00440041005200001B500052004F004400490044003A002D002F002F007B0030007D000117560045005200530049004F004E003A0032002E00300000154D004500540048004F0044003A007B0030007D000019530045005100550045004E00430045003A007B0030007D00001942004500470049004E003A0056004500560045004E005400003944005400530054004100520054003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D000039440054005300540041004D0050003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000354400540045004E0044003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000154C004F0043004100540049004F004E003A002000000F5500490044003A007B0030007D00001F4400450053004300520049005000540049004F004E003A007B0030007D00004158002D0041004C0054002D0044004500530043003B0046004D00540054005900500045003D0074006500780074002F00680074006D006C003A007B0030007D000117530055004D004D004100520059003A007B0030007D0000294F005200470041004E0049005A00450052003A004D00410049004C0054004F003A007B0030007D00001343004C004100530053003A007B0030007D0000155000520049004F0052004900540059003A00350000155000520049004F0052004900540059003A00390000155000520049004F0052004900540059003A0031000039500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C0053004500003F500041005200540053005400410054003D004E0045004500440053002D0041004300540049004F004E003B0052005300560050003D00540052005500450001809541005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D007B0033007D003B007B0032007D003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D000180DF41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D004E004F004E002D005000410052005400490043004900500041004E0054003B00500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C00530045003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D00011942004500470049004E003A00560041004C00410052004D00001F54005200490047004700450052003A002D00500054007B0030007D004D00011D41004300540049004F004E003A0044004900530050004C004100590000294400450053004300520049005000540049004F004E003A00520065006D0069006E00640065007200001545004E0044003A00560041004C00410052004D00001545004E0044003A0056004500560045004E005400001B45004E0044003A005600430041004C0045004E00440041005200001B74006500780074002F00630061006C0065006E00640061007200000D6D006500740068006F00640000096E0061006D00650000174D0065006500740069006E0067002E00690063007300001374006500780074002F00680074006D006C00001B43006F006E00740065006E0074002D0063006C006100730073000147750072006E003A0063006F006E00740065006E0074002D0063006C00610073007300650073003A00630061006C0065006E006400610072006D00650073007300610067006500014353004D0054005000200043006C00690065006E007400200043006F006E00660069006700750072006100740069006F006E0020004500720072006F0072003A00200000414D00610069006C002000530065006E0074002E0020004500760065006E00740020004900640065006E007400690066006900650072003A0020007B0030007D0000294500720072006F0072002000730065006E00640069006E00670020006D00610069006C003A002000000B43004800410049005200000000AB2C5809D2E6DD419991E3297036631400042001010803200001052001011111042001010E80A00766125111551259110C1110020202125D12590E021261021265126902126D02126D02020202020202114D0202020202117102020202020202020202020202020202020211750202020202021D0E080E0202020202020202021D0E080E12791279021279127902127902127902115515127D011280811280810215127D011280811280810215127D011280811280810202021280851280891280891279021279050000128095032000020420001269042000126D0520011141080520001280A90720021280B10E1C0320000E0500020E0E1C052001114908052001114D08050001114D02040001020E05000111410E040000117106000111451171042000117105200111710D050001114908052002010E0E050002020E0E040000117505200112590E09100103020E02101E00040A01110C0800011280B91180BD0700011D0E1280B90600030E0E1C1C040A011110040A011155032000080500020E1C1C05200101115504200101020620011D0E1D030520001280C508151280CD011280C9052001011300062001011280810500020E0E0E0520001280D10520020E030305200012808108151280CD0112808108200015127D0113000715127D0112808104200013000600020E0E1D1C05000102114D080002114D114D114D0520010112510520001280D90900021280890E1280850520001280DD08151280CD011280890520001280E105200101125D060001114D114D0500001280E908B77A5C561934E0890400000000040100000004020000000403000000040400000004050000000406000000040700000003061D0E0206080306110C03061110460021011141114111411141114111411141114111411141114111411141114511451145114111491141114D1149114D11411141114111411149114D114D11411141114D101141030000010801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000701000000001001000B73716C5F636C725F69637300002F01002A53656E64204943532063616C656E64617220696E7669746573207573696E672053514C2053657276657200000501000000001101000C456974616E20426C756D696E00000C010007312E302E302E3000000A010005656E2D55530000000000000008AFE65C00000000020000001C010000145B0000143D000052534453DB4BB0BA851E604CB6E8EA221D2B570601000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C6F626A5C44656275675C73716C5F636C725F6963732E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000585C00000000000000000000725C0000002000000000000000000000000000000000000000000000645C0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000A80300000000000000000000A80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00408030000010053007400720069006E006700460069006C00650049006E0066006F000000E402000001003000300030003000300034006200300000006E002B00010043006F006D006D0065006E00740073000000530065006E00640020004900430053002000630061006C0065006E00640061007200200069006E007600690074006500730020007500730069006E0067002000530051004C002000530065007200760065007200000000003A000D00010043006F006D00700061006E0079004E0061006D0065000000000045006900740061006E00200042006C0075006D0069006E000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000730071006C005F0063006C0072005F006900630073000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E003000000040001000010049006E007400650072006E0061006C004E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C0000003E000D0001004C006500670061006C0043006F007000790072006900670068007400000045006900740061006E00200042006C0075006D0069006E000000000042000D0001004C006500670061006C00540072006100640065006D00610072006B0073000000000045006900740061006E00200042006C0075006D0069006E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C00000038000C000100500072006F0064007500630074004E0061006D00650000000000730071006C005F0063006C0072005F006900630073000000340008000100500072006F006400750063007400560065007200730069006F006E00000031002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E0030002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000C000000843C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010300BE35EA5C0000000000000000E00022200B013000003E00000008000000000000DA5C000000200000006000000000001000200000000200000400000000000000060000000000000000A000000002000000000000030060850000100000100000000010000010000000000000100000000000000000000000885C00004F000000006000000404000000000000000000000000000000000000008000000C000000505B00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000E03C000000200000003E000000020000000000000000000000000000200000602E7273726300000004040000006000000006000000400000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000004600000000000000000000000000004000004200000000000000000000000000000000BC5C0000000000004800000002000500E03200007028000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B3006000E1100000100001100280E00000A0A0F04280F00000A2D1E0F1D280F00000A2C090F1C281000000A2D0C0F00280F00000A16FE012B0117130A110A39F5010000007201000070731100000A130B110B6F1200000A130C110B6F1300000A000F00280F00000A130D110D2C6900110C72310000706F1400000A00110C6F1500000A130E00110E6F1600000A16FE01130F110F2C1C00110E6F1700000A00110B6F1800000A00728A010070731900000A7A00110E166F1A00000A100000110E6F1700000A0000DE0D110E2C08110E6F1B00000A00DC00110C72FA0100706F1400000A00110C6F1C00000A72EB050070178C2B0000016F1D00000A26110C6F1C00000A72F50500700F00281E00000A6F1D00000A26110C6F1500000A13100011106F1600000A16FE01131111112C280011106F1700000A00110B6F1800000A0072070600700F00281E00000A281F00000A731900000A7A000F04280F00000A131211122C0A1110166F1A00000A10040F05280F00000A131311132C0A1110176F1A00000A10050F19280F00000A131411142C0A1110186F1A00000A10190F1A282000000A131511152C0A1110196F2100000A101A0F1B281000000A131611162C0A11101A6F2200000A101B0F1C281000000A131711172C1811101B6F2200000A13181218282300000A282400000A101C0F1D280F00000A2C0C0F1C282300000A16FE012B0116131911192C0A11101C6F1A00000A101D0011106F1700000A0000DE0D11102C0811106F1B00000A00DC110B6F1800000A00000F06280F00000A2D0E0F06281E00000A282500000A2B0117131A111A2C0C7241060070282600000A10060F08280F00000A2D0E0F08281E00000A282500000A2B0117131B111B2C0C7267060070282600000A10080F0F282700000A131C111C2C0C282800000A282900000A100F0F0D282700000A131D111D2C200F0F282A00000A131E121E230000000000C07240282B00000A282900000A100D0F0E282700000A131F111F2C200F0D282A00000A131E121E230000000000004E40282B00000A282900000A100E0F14282000000A132011202C091F0F282C00000A10140F13281000000A132111212C0817282400000A10130F1F281000000A132211222C0816282400000A101F0F12280F00000A2D0E0F12281E00000A282500000A2B0117132311232C0C7271060070282600000A10120F09280F00000A2D0E0F09281E00000A282500000A2B0117132411242C0C7297060070282600000A10090F0A280F00000A2D0E0F0A281E00000A282500000A2B0117132511252C0C72A5060070282600000A100A0F19280F00000A2D0E0F19281E00000A282500000A2B0117132611262C0C72B3060070282600000A10190F1A282000000A132711272C091F19282C00000A101A0F1B281000000A132811282C0816282400000A101B0F1D280F00000A2D0E0F1D281E00000A282500000A2B0117132911292C0C0017282400000A101C002B40000F1E280F00000A2D0E0F1E281E00000A282500000A2B0117132A112A2C0C72C7060070282600000A101E0F1D281E00000A0F1E281E00000A732D00000A0A000F16280F00000A132B112B2C0C72C9060070282600000A10160F17280F00000A132C112C2C0C72E9060070282600000A10170F18280F00000A132D112D2C0C7209070070282600000A10180F10280F00000A132E112E2C0C7229070070282600000A10100F11282000000A132F112F2C1E0F10281E00000A7239070070282E00000A2D03162B0117282C00000A10110E20280F00000A133011302C200E20282F00000A13311231FE161D0000016F3000000A282600000A8110000001733100000A0C0F04280F00000A2D0E0F04281E00000A282500000A2B0117133211322C0C0872470700706F3200000A260F01280F00000A2D0E0F01281E00000A282500000A2C310F02280F00000A2D0E0F02281E00000A282500000A2C1A0F03280F00000A2D0E0F03281E00000A282500000A2B01172B0116133311332C0C0872A10700706F3200000A260F08281E00000A7266080070283300000A2C130F08281E00000A7267060070283300000A2B0116133411342C180872700800700F08281E00000A281F00000A6F3200000A260F10281E00000A171203280100002B16FE01133511352C310872DC0800700F10281E00000AD003000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F0A281E00000A171204280200002B16FE01133611362C310872300900700F0A281E00000AD004000002283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A260F09281E00000A171201280300002B16FE01133711372C3108728C0900700F09281E00000AD015000001283500000A283600000A6F3000000A6F3700000A283800000A6F3200000A26161305161306161307007E010000041338161339388F000000113811399A133A000F01280F00000A2D10113A0F16281E00000A282E00000A2B0116133B113B2C0500171305000F02280F00000A2D10113A0F17281E00000A282E00000A2B0116133C113C2C0500171306000F03280F00000A2D10113A0F18281E00000A282E00000A2B0116133D113D2C050017130700110511065F11075F133E113E2C03002B1200113917581339113911388E693F66FFFFFF0F01280F00000A2D07110516FE012B0116133F113F2C220872E80900700F16281E00000A7E010000046F3000000A283800000A6F3200000A260F02280F00000A2D07110616FE012B0116134011402C2208724E0A00700F17281E00000A7E010000046F3000000A283800000A6F3200000A260F03280F00000A2D07110716FE012B0116134111412C220872BE0A00700F18281E00000A7E010000046F3000000A283800000A6F3200000A26086F3900000A16FE02134211422C11723A0B007008283A00000A731900000A7A733B00000A130811080F06281E00000A6F3C00000A0011080F07281E00000A6F3D00000A001108076F3E00000A0011080F08281E00000A7266080070282E00000A6F3F00000A000F0B280F00000A16FE01134311432C6C00000F0B281E00000A178D3000000125161F3B9D6F4000000A13441613452B43114411459A1346000011086F4100000A1146734200000A6F4300000A0000DE1C134700729C0B0070114611476F4400000A283800000A731900000A7A00114517581345114511448E6932B500000011080F04281E00000A734500000A6F4600000A0000DE1A13480072D40B007011486F4400000A284700000A731900000A7A00000F05280F00000A2D110F05281E00000A282500000A16FE012B0116134911492C1D11086F4800000A0F05281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134A00720A0C0070114A6F4400000A284700000A731900000A7A000011086F4B00000A0F01281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134B0072380C0070114B6F4400000A284700000A731900000A7A00000F02280F00000A2D110F02281E00000A282500000A16FE012B0116134C114C2C1D11086F4C00000A0F02281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134D00726A0C0070114D6F4400000A284700000A731900000A7A00000F03280F00000A2D110F03281E00000A282500000A16FE012B0116134E114E2C1D11086F4D00000A0F03281E00000A1F3B1F2C6F4900000A6F4A00000A0000DE1A134F0072A60C0070114F6F4400000A284700000A731900000A7A0E21280F00000A1350115039EC04000000733100000A1351115172EE0C00706F3200000A261151720E0D00700F12281E00000A281F00000A6F3200000A261151722A0D00706F3200000A26115172420D00700F10281E00000A6F3700000A281F00000A6F3200000A26115172580D00700F11284E00000A8C2B000001281F00000A6F3200000A26115172720D00706F3200000A261151728C0D00700F0D282A00000A8C1C000001281F00000A6F3200000A26115172C60D00700F0F282A00000A8C1C000001281F00000A6F3200000A26115172000E00700F0E282A00000A8C1C000001281F00000A6F3200000A260F0C280F00000A16FE01135411542C19115172360E00700F0C281E00000A284700000A6F3200000A261151724C0E00700E20281E00000A281F00000A6F3200000A261151725C0E00700F07281E00000A281F00000A6F3200000A261151727C0E00700F08281E00000A7266080070282E00000A2D0772B20E00702B0572C80E00700F07281E00000A283800000A6F3200000A26115172DC0E00700F06281E00000A281F00000A6F3200000A26115172F40E007011086F4F00000A6F5000000A281F00000A6F3200000A261151721E0F00700F0A281E00000A6F3700000A281F00000A6F3200000A26071355115545030000000200000011000000200000002B2D115172320F00706F3200000A262B20115172480F00706F3200000A262B111151725E0F00706F3200000A262B022B000F15282300000A2D0772740F00702B0572AE0F007013521613530011086F4B00000A6F5100000A13562B6C11566F5200000A13570011576F5000000A11086F4F00000A6F5000000A282E00000A135811582C03171353115172EE0F00701A8D0E000001251611576F5300000AA2251711576F5000000AA225181152A225190F16281E00000A6F3700000AA2285400000A6F3200000A260011566F5500000A2D8BDE0D11562C0811566F1B00000A00DC0011086F4C00000A6F5100000A13592B6C11596F5200000A135A00115A6F5000000A11086F4F00000A6F5000000A282E00000A135B115B2C03171353115172EE0F00701A8D0E0000012516115A6F5300000AA22517115A6F5000000AA225181152A225190F17281E00000A6F3700000AA2285400000A6F3200000A260011596F5500000A2D8BDE0D11592C0811596F1B00000A00DC0011086F4D00000A6F5100000A135C2B6C115C6F5200000A135D00115D6F5000000A11086F4F00000A6F5000000A282E00000A135E115E2C03171353115172EE0F00701A8D0E0000012516115D6F5300000AA22517115D6F5000000AA225181152A225190F18281E00000A6F3700000AA2285400000A6F3200000A2600115C6F5500000A2D8BDE0D115C2C08115C6F1B00000A00DC115316FE01135F115F2C400011086F4D00000A11086F4F00000A6F5600000A001151728510007011086F4F00000A6F5300000A11086F4F00000A6F5000000A283800000A6F3200000A26000E1313181118285700000A2D1F11180F10281E00000A7239070070283300000A282400000A285800000A2B021118285900000A136011602C5400115172661100706F3200000A26115172801100700F14284E00000A8C2B000001281F00000A6F3200000A26115172A01100706F3200000A26115172BE1100706F3200000A26115172E81100706F3200000A2600115172FE1100706F3200000A26115172141200706F3200000A260E2111516F3000000A282600000A811000000100735A00000A13090011090F19281E00000A6F5B00000A0011090F1A284E00000A6F5C00000A0011090F1C282300000A6F5D00000A0011090F1B282300000A6F5E00000A001109066F5F00000A007230120070736000000A136111616F6100000A724C12007072290700706F6200000A0011616F6100000A725A12007072641200706F6200000A000F07281E00000A0F08281E00000A7266080070282E00000A2D0772B20E00702B0572C80E0070736000000A286300000A136211086F6400000A11626F6500000A000E21281E00000A1161286300000A136311086F6400000A11636F6500000A0011086F6600000A727C12007072981200706F6700000A0000DE1A13640072E012007011646F4400000A284700000A731900000A7A0000110911086F6800000A000E1F286900000A285900000A136511652C1C286A00000A72241300700E20281E00000A281F00000A6F6B00000A0000DE1A136600726613007011666F4400000A284700000A731900000A7A2A0000413C0100020000007A00000044000000BE0000000D00000000000000020000001301000004010000170200000D0000000000000000000000D508000018000000ED0800001C0000001E000001000000001A09000018000000320900001A0000001E000001000000004D090000420000008F0900001A0000001E00000100000000AA09000021000000CB0900001A0000001E00000100000000E609000042000000280A00001A0000001E00000100000000430A000042000000850A00001A0000001E00000102000000E50C0000790000005E0D00000D00000000000000020000007A0D000079000000F30D00000D00000000000000020000000F0E000079000000880E00000D0000000000000000000000A20F0000FA0000009C1000001A0000001E00000100000000B71000003C000000F31000001A0000001E0000012202286C00000A002AB21A8D2D000001251672C9060070A2251772E9060070A225187209070070A225197290130070A280010000042A000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000C8060000237E000034070000300A000023537472696E677300000000641100009C1300002355530000250000100000002347554944000000102500006003000023426C6F620000000000000002000001571D0208090A000000FA013300160000010000003A000000040000000E00000003000000220000006C0000000B0000000D0000000100000004000000010000000300000002000000030000000000AD0401000000000006008303DB060600F003DB060600CE02BC060F000C0700000600E2022A05060066032A05060047032A050600D7032A050600A3032A050600BC032A0506000F032A0506002A032A050600AC02FB060600C108F0040A00F9026E060A00300445070A00440245070A001F0045070A00110545070E006609DC080E00080A9D0406002D0682090E0097019D040E000F099D040A00B705F9080A004F01F9080A001106F90806004702F00406002401F0040600C505F00406000E00B1000E002B089D040E006C0234020E00A9099D0406000905F0040E00A301DC080E006C04DC080A00AA05CF050A003701CF050A000406CF050600B301F0040A005005F90806002200F0040A006106F90806005A04F00406007302F0040600BF01F0040600FF05F0040E007D059D040E001A099D04060001007E040E0067059D0406008906E7070E00D009FA000E0092059D040E003C05FA000A009E096E060A0064026E060000000028000000000001000100010010005A07000039000100010003010000CF0600008D000200040003010000150800008D000B00040011003207600206068C00640256805300670256807E00670256808600670256806800670256803F00670256804B00670256807600670256806F00670206068C006402568038006B02568043006B0256805B006B02502000000000960098026F020100A832000000008618A30606002300B132000000009118A906B9022300000001000E02000002004F08000003004A0800000400440800000500370800000600E90500000700D40800000800CB0900000900B50800000A00770100000B00150A00000C006A0800000D00210500000E00D90000000F00CC0000001000E800000011005F01000012008201000013001901000014003B0600001500760700001600F20500001700EE0100001800E90100001900E30100001A00240200001B00480900001C00E50400001D00CF0700001E001B0200001F006601000020001B07000021004806000022007B080900A30601001100A30606001900A3060A002900A30610003100A30610003900A30610004100A30610004900A30610005100A30610005900A30610006100A30610006900A30610007900A306060021019707B8008100BD04BE009900BD04BE00C900A3061000C9004101C20031011C05060039018E091000D1001F06C70041019B08BE00410181020600310181020600F100A3061000D9002D04CC00490187020600D1000608D20051011804D80081000E04E0006901AE08E4009100BD04BE00D9001C00EA00D9000E05F00099000E04BE009900E708F6006901210AFC008100E70801018900BD04BE00E100B70907018900E7080C0189000E041301E1006B0718019100E7081E012901A30624016901E1092A01E9002101300171005804E000B100A3060600B100500235016901ED092A0119018F023B017101D1014A0119013C07530169015906E0006901AE085B01B10061046C016901A7087001B900A3060600B900C8081000B900C2091000B900FB097601B900C8047C016901F3088101B9005A0888019101A30610000C00F6009701F1008B01E0000101A3061000B90000059D016901A708A401B9004D09AA0169016F01B001A101F6001000B900E205AA01B9003100AA01B900A900AA0191000E046C01B900F704B60101011F08E00014009506C5011C002509D6010101FE01E0006901AE08DB01A9017909BE001400F600970199007802E20199002901E80199002504E201C100A3060600C1005D091000C1003F090100C100B5077C01C100D7047C01C1008707F1010901A306100009010608F701B101F600240111013A04FD01B900880807022400F6009701B900FA071602C101F6002401C1005A011C02990031092202C9015B022902D1015A0110007100A306060008000C003802080010003D0208001400420208001800470208001C004C02080020005102080024005602080028005B02080030003802080034003D0208003800420220006B003D022E000B00BD022E001300C6022E001B00E5022E002300EE022E002B00FF022E0033002F032E003B0035032E004300EE022E004B0035032E00530035032E005B0047032E006300540315008E01BC01CE010D02048000000200000000000000000000000000B00600000400000000000000000000002F02A000000000000400000000000000000000002F029400000000000400000000000000000000002F02F0040000000003000200040002006900450169006201690067010000000000436F6C6C656374696F6E60310049456E756D657261746F7260310047657453716C496E743332003C4D6F64756C653E006765745F4343005055424C49430041444400505249564154450052454652455348005055424C49534800434F4E464944454E5449414C0043414E43454C004445434C494E45434F554E5445520052455155455354005245504C590076616C75655F5F0053797374656D2E44617461006D73636F726C6962006765745F4263630053797374656D2E436F6C6C656374696F6E732E47656E6572696300656E645F74696D655F7574630073746172745F74696D655F7574630074696D657374616D705F757463004164640053797374656D2E436F6C6C656374696F6E732E5370656369616C697A65640070726F645F6964004E657747756964006F705F42697477697365416E64004462436F6D6D616E6400437265617465436F6D6D616E640053716C436F6D6D616E640053656E64006D6574686F640070617373776F7264005265706C61636500696D706F7274616E63650073657175656E6365006765745F4D657373616765004D61696C4D6573736167650043726564656E7469616C43616368650049446973706F7361626C650052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500626C696E645F636F70795F726563697069656E74735F726F6C65006765745F446973706C61794E616D650070726F66696C655F6E616D6500757365726E616D6500736D74705F7365727665726E616D650053797374656D2E4E65742E4D696D650053716C4461746554696D6500417070656E644C696E65006765745F506970650053716C5069706500436F6E74656E7454797065006F705F46616C736500436C6F736500446973706F736500547279506172736500636C725F73656E645F6963735F696E76697465004E65757472616C5265736F75726365734C616E67756167654174747269627574650044656275676761626C6541747472696275746500417373656D626C795469746C654174747269627574650053716C50726F63656475726541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F56616C7565004164645769746856616C7565006F705F547275650047657453716C537472696E6700437265617465416C7465726E6174655669657746726F6D537472696E6700546F537472696E67006765745F4C656E677468004E6574776F726B43726564656E7469616C0053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C0053797374656D2E4E65742E4D61696C0073716C5F636C725F6963732E646C6C006765745F49734E756C6C007365745F4973426F647948746D6C007365745F456E61626C6553736C00656E61626C655F73736C0053797374656D006765745F46726F6D007365745F46726F6D00456E756D0047657453716C426F6F6C65616E004F70656E006C6F636174696F6E0053797374656D2E5265666C656374696F6E004E616D6556616C7565436F6C6C656374696F6E0053716C506172616D65746572436F6C6C656374696F6E004D61696C41646472657373436F6C6C656374696F6E004174746163686D656E74436F6C6C656374696F6E00416C7465726E61746556696577436F6C6C656374696F6E004462436F6E6E656374696F6E0053716C436F6E6E656374696F6E00457863657074696F6E0053797374656D2E446174612E436F6D6D6F6E006765745F546F007265706C795F746F00726571756972655F727376700043686172004462446174615265616465720053716C44617461526561646572004578656375746552656164657200537472696E674275696C646572007573655F72656D696E646572006576656E745F6964656E74696669657200546F55707065720053716C506172616D65746572004D6963726F736F66742E53716C5365727665722E5365727665720049456E756D657261746F7200476574456E756D657261746F72002E63746F72002E6363746F720073716C5F636C725F6963730053797374656D2E446961676E6F7374696373006943616C4D6574686F64730053797374656D2E52756E74696D652E436F6D70696C657253657276696365730053797374656D2E5265736F757263657300446562756767696E674D6F6465730073757070726573735F696E666F5F6D65737361676573006943616C526F6C6573004765744E616D65730053797374656D2E446174612E53716C54797065730053746F72656450726F63656475726573004164644D696E757465730072656D696E6465725F6D696E75746573007365745F43726564656E7469616C73006765745F44656661756C744E6574776F726B43726564656E7469616C73007365745F55736544656661756C7443726564656E7469616C73007573655F64656661756C745F63726564656E7469616C730053797374656D2E436F6C6C656374696F6E73006765745F48656164657273006765745F506172616D6574657273006943616C436C617373006765745F41646472657373004D61696C416464726573730066726F6D5F6164647265737300626C696E645F636F70795F726563697069656E7473006765745F4174746163686D656E74730066696C655F6174746163686D656E7473006963735F636F6E74656E7473006765745F416C7465726E6174655669657773006765745F486173526F777300436F6E63617400466F726D617400626F64795F666F726D6174004F626A656374007365745F5375626A656374007375626A6563740053797374656D2E4E6574006F705F496D706C696369740053706C69740053797374656D2E446174612E53716C436C69656E7400536D7470436C69656E74004174746163686D656E74006765745F43757272656E74006F705F4C6F676963616C4E6F74007365745F506F727400706F7274006765745F5265706C79546F4C697374007365745F486F7374004943726564656E7469616C734279486F7374004D6F76654E6578740053797374656D2E54657874007365745F436F6D6D616E64546578740053716C436F6E7465787400416C7465726E61746556696577006765745F5574634E6F77007365745F426F647900626F647900537472696E6744696374696F6E617279006F705F457175616C697479006F705F496E657175616C697479007365745F5072696F72697479004D61696C5072696F726974790073656E73697469766974790049734E756C6C4F72456D7074790000002F63006F006E007400650078007400200063006F006E006E0065006300740069006F006E003D007400720075006500008157530045004C00450043005400200070002E006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007000720069006E0063006900700061006C00700072006F00660069006C0065005D002000410053002000700070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A004F004E002000700070002E00700072006F00660069006C0065005F006900640020003D00200070002E00700072006F00660069006C0065005F00690064000D000A00570048004500520045002000700070002E00690073005F00640065006600610075006C00740020003D0020003100006F700072006F00660069006C0065005F006E0061006D00650020006E006F0074002000730070006500630069006600690065006400200061006E00640020006E006F002000640065006600610075006C0074002000700072006F00660069006C006500200066006F0075006E0064000083EF530045004C00450043005400200054004F00500020003100200061002E0065006D00610069006C005F0061006400640072006500730073002C00200061002E007200650070006C00790074006F005F0061006400640072006500730073002C00200073002E007300650072007600650072006E0061006D0065002C00200073002E0070006F00720074002C00200073002E0065006E00610062006C0065005F00730073006C002C00200073002E007500730065005F00640065006600610075006C0074005F00630072006500640065006E007400690061006C0073002C00200073002E0075007300650072006E0061006D0065000D000A00460052004F004D0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065005D00200041005300200070000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F00700072006F00660069006C0065006100630063006F0075006E0074005D002000410053002000700061000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D002000700061002E00700072006F00660069006C0065005F00690064000D000A0041004E0044002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020003E003D00200040005300650071000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F006100630063006F0075006E0074005D00200041005300200061000D000A004F004E002000700061002E006100630063006F0075006E0074005F006900640020003D00200061002E006100630063006F0075006E0074005F00690064000D000A0049004E004E004500520020004A004F0049004E0020005B006D007300640062005D002E005B00640062006F005D002E005B007300790073006D00610069006C005F007300650072007600650072005D00200041005300200073000D000A004F004E00200070002E00700072006F00660069006C0065005F006900640020003D00200073002E006100630063006F0075006E0074005F00690064000D000A0057004800450052004500200070002E006E0061006D00650020003D0020004000500072006F00660069006C0065000D000A004F0052004400450052002000420059002000700061002E00730065007100750065006E00630065005F006E0075006D0062006500720020004100530043000009400053006500710000114000500072006F00660069006C0065000039700072006F00660069006C0065005F006E0061006D006500200027007B0030007D00270020006E006F007400200066006F0075006E0064000125530051004C00200053006500720076006500720020004D0065006500740069006E0067000009540045005800540000255300630068006500640075006C0065002000610020004D0065006500740069006E006700000D4E006F0072006D0061006C00000D5000750062006C006900630000136C006F00630061006C0068006F00730074000001001F5200450051002D005000410052005400490043004900500041004E005400011F4F00500054002D005000410052005400490043004900500041004E005400011F4E004F004E002D005000410052005400490043004900500041004E005400010F5200450051005500450053005400000D430041004E00430045004C0000594D0069007300730069006E0067002000730065006E006400650072003A00200050006C0065006100730065002000730070006500630069006600790020004000660072006F006D005F0061006400640072006500730073000080C34D0069007300730069006E006700200072006500630069007000690065006E00740073003A00200050006C0065006100730065002000730070006500630069006600790020006500690074006800650072002000400072006500630069007000690065006E00740073002C002000400063006F00700079005F0072006500630069007000690065006E007400730020006F0072002000400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073000009480054004D004C00006B400062006F00640079005F0066006F0072006D006100740020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A00200054004500580054002C002000480054004D004C00005340006D006500740068006F00640020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B730065006E007300690074006900760069007400790020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00005B400069006D0070006F007200740061006E006300650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D000065400072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006F400063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00007B400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E00740073005F0072006F006C00650020007B0030007D00200069007300200069006E00760061006C00690064002E002000560061006C00690064002000760061006C007500650073003A0020007B0031007D00006155006E00610062006C006500200074006F002000730065006E00640020006D00610069006C002000640075006500200074006F002000760061006C00690064006100740069006F006E0020006500720072006F0072002800730029003A002000003755006E00610062006C006500200074006F002000610074007400610063006800200027007B0030007D0027003A0020007B0031007D0001354000660072006F006D005F006100640064007200650073007300200069007300200069006E00760061006C00690064003A002000002D40007200650070006C0079005F0074006F00200069007300200069006E00760061006C00690064003A0020000031400072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000003B400063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A0020000047400062006C0069006E0064005F0063006F00700079005F0072006500630069007000690065006E0074007300200069007300200069006E00760061006C00690064003A002000001F42004500470049004E003A005600430041004C0045004E00440041005200001B500052004F004400490044003A002D002F002F007B0030007D000117560045005200530049004F004E003A0032002E00300000154D004500540048004F0044003A007B0030007D000019530045005100550045004E00430045003A007B0030007D00001942004500470049004E003A0056004500560045004E005400003944005400530054004100520054003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D000039440054005300540041004D0050003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000354400540045004E0044003A007B0030003A0079007900790079004D004D00640064005400480048006D006D00730073005A007D0000154C004F0043004100540049004F004E003A002000000F5500490044003A007B0030007D00001F4400450053004300520049005000540049004F004E003A007B0030007D00003558002D0041004C0054002D0044004500530043003B0046004D00540054005900500045003D007B0030007D003A007B0031007D00011574006500780074002F0070006C00610069006E00001374006500780074002F00680074006D006C000017530055004D004D004100520059003A007B0030007D0000294F005200470041004E0049005A00450052003A004D00410049004C0054004F003A007B0030007D00001343004C004100530053003A007B0030007D0000155000520049004F0052004900540059003A00350000155000520049004F0052004900540059003A00390000155000520049004F0052004900540059003A0031000039500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C0053004500003F500041005200540053005400410054003D004E0045004500440053002D0041004300540049004F004E003B0052005300560050003D00540052005500450001809541005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D007B0033007D003B007B0032007D003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D000180DF41005400540045004E004400450045003B004300550054005900500045003D0049004E0044004900560049004400550041004C003B0052004F004C0045003D004E004F004E002D005000410052005400490043004900500041004E0054003B00500041005200540053005400410054003D00410043004300450050005400450044003B0052005300560050003D00460041004C00530045003B0043004E003D0022007B0030007D0022003B0058002D004E0055004D002D004700550045005300540053003D0030003A006D00610069006C0074006F003A007B0031007D00011942004500470049004E003A00560041004C00410052004D00001F54005200490047004700450052003A002D00500054007B0030007D004D00011D41004300540049004F004E003A0044004900530050004C004100590000294400450053004300520049005000540049004F004E003A00520065006D0069006E00640065007200001545004E0044003A00560041004C00410052004D00001545004E0044003A0056004500560045004E005400001B45004E0044003A005600430041004C0045004E00440041005200001B74006500780074002F00630061006C0065006E00640061007200000D6D006500740068006F00640000096E0061006D00650000174D0065006500740069006E0067002E00690063007300001B43006F006E00740065006E0074002D0063006C006100730073000147750072006E003A0063006F006E00740065006E0074002D0063006C00610073007300650073003A00630061006C0065006E006400610072006D00650073007300610067006500014353004D0054005000200043006C00690065006E007400200043006F006E00660069006700750072006100740069006F006E0020004500720072006F0072003A00200000414D00610069006C002000530065006E0074002E0020004500760065006E00740020004900640065006E007400690066006900650072003A0020007B0030007D0000294500720072006F0072002000730065006E00640069006E00670020006D00610069006C003A002000000B4300480041004900520000B7AA02735A6E32448C978C58AA75F9E700042001010803200001052001011111042001010E80A10767125111551259110C1110020202125D1261021265126902126D02126D02020202020202114D0202020202117102020202020202020202020202020202020211750202020202021D0E080E0202020202020202021D0E080E1279127902127912790212790212790212590E0202115515127D011280811280810215127D011280811280810215127D011280811280810202021280851280891280891279021279050000128095032000020420001269042000126D0520011141080520001280A90720021280B10E1C0320000E0500020E0E1C052001114908052001114D08050001114D02040001020E05000111410E040000117106000111451171042000117105200111710D050001114908052002010E0E050002020E0E040000117505200112590E09100103020E02101E00040A01110C0800011280B91180BD0700011D0E1280B90600030E0E1C1C040A011110040A011155032000080500020E1C1C05200101115504200101020620011D0E1D030520001280C508151280CD011280C9052001011300062001011280810500020E0E0E0520001280D10520020E030305200012808108151280CD0112808108200015127D0113000715127D0112808104200013000600020E0E1D1C05000102114D080002114D114D114D0520010112510520001280D90900021280890E1280850520001280DD08151280CD011280890520001280E105200101125D060001114D114D0500001280E908B77A5C561934E0890400000000040100000004020000000403000000040400000004050000000406000000040700000003061D0E0206080306110C03061110490022011141114111411141114111411141114111411141114111411141114511451145114111491141114D1149114D11411141114111411149114D114D11411141114D101141101141030000010801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000701000000001001000B73716C5F636C725F69637300002F01002A53656E64204943532063616C656E64617220696E7669746573207573696E672053514C2053657276657200000501000000001101000C456974616E20426C756D696E00000C010007322E302E302E3000000A010005656E2D555300000000000000BD35EA5C00000000020000001C0100006C5B00006C3D0000525344534221EEC2CD07384D8DE1547ADD0CF7D801000000433A5C55736572735C656974616E2E626C756D696E5C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C6F626A5C44656275675C73716C5F636C725F6963732E7064620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B05C00000000000000000000CA5C0000002000000000000000000000000000000000000000000000BC5C0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF250020001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000A80300000000000000000000A80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000002000000000000000200000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00408030000010053007400720069006E006700460069006C00650049006E0066006F000000E402000001003000300030003000300034006200300000006E002B00010043006F006D006D0065006E00740073000000530065006E00640020004900430053002000630061006C0065006E00640061007200200069006E007600690074006500730020007500730069006E0067002000530051004C002000530065007200760065007200000000003A000D00010043006F006D00700061006E0079004E0061006D0065000000000045006900740061006E00200042006C0075006D0069006E000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000730071006C005F0063006C0072005F006900630073000000300008000100460069006C006500560065007200730069006F006E000000000032002E0030002E0030002E003000000040001000010049006E007400650072006E0061006C004E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C0000003E000D0001004C006500670061006C0043006F007000790072006900670068007400000045006900740061006E00200042006C0075006D0069006E000000000042000D0001004C006500670061006C00540072006100640065006D00610072006B0073000000000045006900740061006E00200042006C0075006D0069006E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000730071006C005F0063006C0072005F006900630073002E0064006C006C00000038000C000100500072006F0064007500630074004E0061006D00650000000000730071006C005F0063006C0072005F006900630073000000340008000100500072006F006400750063007400560065007200730069006F006E00000032002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000032002E0030002E0030002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000C000000DC3C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE; - GO ALTER ASSEMBLY [sql_clr_ics] DROP FILE ALL - ADD FILE FROM 0x4D6963726F736F667420432F432B2B204D534620372E30300D0A1A4453000000000200000200000023000000A80000000000000021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38000000FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA3101380000000010000000100000000000000E00FFFF04000000FFFF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA3101380000000010000000100000000000000F00FFFF04000000FFFF0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310108AFE65C01000000DB4BB0BA851E604CB6E8EA221D2B570600000000000000000100000001000000000000000000000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F862513FC607D311905300C04FA302A1C4454B99E9E6D211903F00C04FA302A10B9D865A1166D311BD2A0000F80849BDEC1618FF5EAA104D87F76F49638334601400000000000000E9AEBC861E8A1BC62B30F76981069304B00CEECE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E310000000000000E3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEEFFEEF010000009600000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730000633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730004000000010000004B0000004C000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001BE2300180000000507340607411D50101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000100000001000000000000004C000000280000001BE23001C34C82495C000000010000004B0000004C000000650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003E002A11000000002008000000000000B7100000000000000000000001000006000000000100000000636C725F73656E645F6963735F696E76697465000000001600031104000000B8060000B710000000000000010000000A0024115553797374656D00120024115553797374656D2E54657874000000000E0024115553797374656D2E4E657400160024115553797374656D2E4E65742E4D61696C000000001A0024115553797374656D2E446174612E53716C54797065730000001A0024115553797374656D2E446174612E53716C436C69656E7400001E002411554D6963726F736F66742E53716C5365727665722E536572766572001E0020110000000001000011000000000000000063726564656E7469616C730022002011010000000100001100000000000000006D61696C5072696F72697479000000001E0020110200000001000011000000000000000073625F4572726F727300000026002011030000000100001100000000000000006D6574686F645F656E756D76616C7565000000002A0020110400000001000011000000000000000073656E73697469766974795F656E756D76616C75650000002A00201105000000010000110000000000000000726563697069656E745F726F6C655F666F756E64000000002E00201106000000010000110000000000000000636F70795F726563697069656E745F726F6C655F666F756E640000003200201107000000010000110000000000000000626C696E645F636F70795F726563697069656E745F726F6C655F666F756E640016002011080000000100001100000000000000006D7367001600201109000000010000110000000000000000737472001E0020110A000000010000110000000000000000727376705F737472696E67002A0020110B0000000100001100000000000000006F7267616E697A65725F696E5F726563697069656E7473001E0020110C000000010000110000000000000000736D7470636C69656E740000160003114400000090030000F50100003800000001000000160020110E000000010000110000000000000000636F6E00160020110F000000010000110000000000000000636D640016000311E0020000580300005A00000071000000010000001600201111000000010000110000000000000000726472000200060016000311E00200008C0300001A0100000A0100000100000016002011130000000100001100000000000000007264720002000600020006001600031144000000C803000089000000F1060000010000001A0020113D0000000100001100000000000000006974656D00000000020006001600031144000000300400003D000000CD0800000100000016002011490000000100001100000000000000006174740016000311CC0300002C0400001C000000ED08000001000000160020114A0000000100001100000000000000006500000002000600020006001600031144000000640400001A0000003209000001000000160020114B00000001000011000000000000000065000000020006001600031144000000980400001A0000008F09000001000000160020114D00000001000011000000000000000065000000020006001600031144000000CC0400001A000000CB09000001000000160020114E00000001000011000000000000000065000000020006001600031144000000000500001A000000280A000001000000160020115000000001000011000000000000000065000000020006001600031144000000340500001A000000850A0000010000001600201152000000010000110000000000000000650000000200060016000311440000006C0500006C000000B70C0000010000001A002011560000000100001100000000000000006164647200000000020006001600031144000000A40500006C0000004C0D0000010000001A002011590000000100001100000000000000006164647200000000020006001600031144000000DC0500006C000000E10D0000010000001A0020115C00000001000011000000000000000061646472000000000200060016000311440000004C060000E50000005E0F0000010000001A00201160000000010000110000000000000000636F6E74797065001A0020116100000001000011000000000000000048544D4C000000001A00201162000000010000110000000000000000617643616C000000020006001600031144000000800600001A0000004510000001000000160020116300000001000011000000000000000065000000020006001600031144000000B40600001A0000009C10000001000000160020116500000001000011000000000000000065000000020006000200060062010404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004020000040000000C00000001000700040600013401000001450180940194AA01980E0198FD019AAE019ADA019B0B01A16401A9D401B04101B0B801B86302810701819501820A02824D0183700283B301881E0288590289800289D2028A1C028A74028AB5028B0400028B73028C9F028D03028D65028DA900028E04028E5B028E98028ECF028F1B028F7F028FE00290460290B90290DE0291140291BA02926E0292B802930C02936E02939E0293EB000294D602956A02971D0297D70298C30299BE079B3F099B3F019B3F029B77029C09029CAA029D5D029E03029EC5029F9B02A08B02A22D07A26309A26301A26301A33A01A46102A4F801A58801A66502A6FA01A79602A83001A8DF02AC7202AE9006B0E401B0E402B12106B24701B24702B28406B3AF01B3AF02B3ED02B51E02B64A01B9DE01BABA01BB6E01BC5A02BD6A01BE1300020006002E002A110000000084080000000000002C000000000000000000000003000006B710000001000000002E6363746F72002E000404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004010000040100000C0000000100000602000600F2000000E81100000000000001000100B7100000000000007C010000DC11000000000000320000800100000035000080070000003C00008031000000EEEFFE80380000003D000080390000003E000080450000003F0000804E0000004000008056000000420000805F000000EEEFFE8063000000430000806400000044000084710000004A0000807A0000004B0000807B0000004C00008087000000EEEFFE808B0000004D0000808C0000004E000080940000004F0000809C00000050000080A700000052000080A800000053000080B200000054000080B300000055000080BB00000056000080BE000000EEEFFE80CA000000EEEFFE80CB00000057000080CC0000005900008AD900000065000080F1000000660000800A010000680000801301000069000080140100006A00008020010000EEEFFE80240100006B000080250100006C0000802D0100006D000080350100006E0000804C010000710000804D0100007200008056010000EEEFFE805A0100007200008064010000730000806D010000EEEFFE8071010000730000807B0100007400008084010000EEEFFE80880100007400008092010000750000809B010000EEEFFE809F01000075000080A901000076000080B2010000EEEFFE80B601000076000080C001000077000080C9010000EEEFFE80CD01000077000080E501000078000080FD010000EEEFFE8001020000780000800B020000790000800C0200007A000080140200007B00008017020000EEEFFE8023020000EEEFFE80240200007C0000802C0200007D0000802D0200008300008047020000EEEFFE804B02000083000080570200008400008071020000EEEFFE80750200008400008081020000850000808A020000EEEFFE808E020000850000809A02000086000080A3020000EEEFFE80A702000086000080C702000087000080D0020000EEEFFE80D402000087000080F402000088000080FD020000EEEFFE8001030000880000800A0300008900008013030000EEEFFE8017030000890000801F0300008A00008028030000EEEFFE802C0300008A000080340300008B0000804E030000EEEFFE80520300008B0000805E0300008C00008078030000EEEFFE807C0300008C000080880300008D000080A2030000EEEFFE80A60300008D000080B20300008F000080CC030000EEEFFE80D00300008F000080DC03000090000080E5030000EEEFFE80E903000090000080F203000091000080FB030000EEEFFE80FF03000091000080070400009300008021040000EEEFFE80250400009400008026040000950000802E04000096000080310400009800008032040000990000804C040000EEEFFE8050040000990000805C0400009A000080700400009B000080710400009D0000807A040000EEEFFE807E0400009D0000808A0400009E00008093040000EEEFFE80970400009E000080A30400009F000080AC040000EEEFFE80B00400009F000080BC040000A1000080C5040000EEEFFE80C9040000A1000080D5040000A2000080DE040000EEEFFE80E2040000A200008000050000A300008009050000EEEFFE800D050000A30000802D050000A900008033050000AB0000804D050000EEEFFE8051050000AB0000805D050000AC000084A8050000EEEFFE80AC050000B1000080B8050000B3000080E1050000EEEFFE80E5050000B3000080FD050000B400008011060000EEEFFE8015060000B400008046060000B50000805A060000EEEFFE805E060000B50000808F060000B6000080A3060000EEEFFE80A7060000B6000080D8060000B8000080DB060000B9000080DE060000BA000080E1060000BC000080E2060000BC000080EC060000EEEFFE80F1060000BC000080F8060000BD000080F9060000BE00008015070000EEEFFE8019070000BF0000801A070000C00000801D070000C10000801E070000C20000803A070000EEEFFE803E070000C30000803F070000C400008042070000C500008043070000C60000805F070000EEEFFE8063070000C700008064070000C800008067070000C900008068070000CA00008072070000EEEFFE8076070000CB00008077070000CC00008079070000CE0000807A070000EEEFFE8080070000BC0000808B070000D00000809E070000EEEFFE80A2070000D0000080C4070000D1000080D7070000EEEFFE80DB070000D1000080FD070000D200008010080000EEEFFE8014080000D200008036080000D400008041080000EEEFFE8045080000D400008056080000DA0000805D080000DB0000806C080000DC0000807B080000DD00008084080000DE0000809D080000E0000080A9080000EEEFFE80AD080000E1000080AE080000E2000080AF080000E2000080CB080000EEEFFE80CD080000E2000080D4080000E3000080D5080000E5000080D6080000E6000080EA080000E7000080ED080000E8000080EF080000E9000080F0080000EA00008009090000EC0000800A090000EEEFFE8010090000E200008018090000ED00008019090000EEEFFE801A090000F00000801B090000F10000802F090000F200008032090000F300008034090000F400008035090000F50000804C090000EEEFFE804D090000F90000804E090000FA0000806B090000EEEFFE806F090000FA0000808C090000FB0000808F090000FC00008091090000FD00008092090000FE000080A9090000EEEFFE80AA09000002010080AB09000003010080C809000004010080CB09000005010080CD09000006010080CE09000007010080E5090000EEEFFE80E60900000B010080E70900000C010080040A0000EEEFFE80080A00000C010080250A00000D010080280A00000E0100802A0A00000F0100802B0A000010010080420A0000EEEFFE80430A000014010080440A000015010080610A0000EEEFFE80650A000015010080820A000016010080850A000017010080870A000018010080880A0000190100809F0A000020010080A60A000021010080B30A000022010080CC0A000023010080D90A000024010080F70A000025010080150B000027010080220B000028010080400B0000290100805E0B00002A0100807C0B00002B010080880B0000EEEFFE808C0B00002B010080A50B00002C010080BE0B00002D010080D70B00002E010080F00B00002F010080090C000030010080270C000031010080450C000033010080480C0000EEEFFE805D0C0000360100806A0C0000370100806C0C000039010080790C00003A0100807B0C00003C010080880C00003D0100808A0C00003F0100808C0C000042010080A30C000043010080A60C000045010080A70C000045010080B50C0000EEEFFE80B70C000045010080C00C000046010080C10C000047010080DB0C0000EEEFFE80DF0C000047010080E20C000048010080220D000049010080230D0000450100802E0D0000EEEFFE803A0D0000EEEFFE803B0D00004B0100803C0D00004B0100804A0D0000EEEFFE804C0D00004B010080550D00004C010080560D00004D010080700D0000EEEFFE80740D00004D010080770D00004E010080B70D00004F010080B80D00004B010080C30D0000EEEFFE80CF0D0000EEEFFE80D00D000051010080D10D000051010080DF0D0000EEEFFE80E10D000051010080EA0D000052010080EB0D000053010080050E0000EEEFFE80090E0000530100800C0E0000540100804C0E0000550100804D0E000051010080580E0000EEEFFE80640E0000EEEFFE80650E0000570100806C0E0000EEEFFE80700E000058010080710E000059010080850E00005A010080AF0E00005B010080B00E00005D010080E50E0000EEEFFE80E90E00005E010080EA0E00005F010080F70E000060010080150F000061010080220F0000620100802F0F0000630100803C0F0000640100803D0F0000660100804A0F000067010080570F00006D0100805E0F0000700100805F0F0000710100806E0F0000720100807D0F0000730100808C0F0000740100809B0F000075010080A40F000076010080B00F000077010080CE0F000078010080E50F00007A010080FD0F00007B0100800C1000007C0100801C1000007D0100802B1000007F01008042100000800100804510000081010080471000008201008048100000830100805F100000EEEFFE80601000008B010080611000008C0100806B1000008D01008079100000EEEFFE807D1000008E010080991000008F0100809C100000900100809E100000910100809F10000092010080B6100000960100800500060009005400090070000000000009000A000D004E000D0032000D0018000D002500000000000D000E0011001A0018003F00110012001500260000000000150016001900250019002500190068001500160019003C0015001600150021001100120000000000000000000D000E000D0022000D0034000D00490014003B000D000E00110022000000000011001200150021001500210015006C001100120015002D00000000002E00510015002900000000002A00490015003000000000003100570015002500000000002600400015002B00000000002C004E00150038000000000039006E0015004B00000000004C006B001100120011001D000D000E0000000000000000000D00190009000A0009004300000000004400630009004B00000000004C006100090022000000000023004300090023000000000024005A00090021000000000022005600090025000000000026003C0009002100000000002200360009002B00000000002C004B0009004300000000004400630009004900000000004A00600009004B00000000004C00630009005300000000005400720009001900000000001A00240009001F000000000020003300090045000000000009000A000D002C0009000A0009000A000D004900000000004A0058000D00510009000A0009002400000000002500490009002900000000002A00530009002F000000000030005F0009001B00000000001C002F0009001D00000000001E004C000900250000000000260053000900370009004D00000000004E00930009000D00000000000D00870009004800000000004900B90009005200000000005300EB0009005A00000000005B00FA0009004600000000004700E80009002B000900300009003600090010001E0027000000000012001A0009000A000D004500000000000D000E0011002D000D000E000D004F00000000000D000E00110032000D000E000D005B00000000000D000E00110038000D000E000D006600000000000D000E001100170009000A00000000001B001D0009003900000000003A00C10009004300000000004400D50009004F00000000005000ED0009002200000000002300770009002D000900250009001F000900250009003800090026000000000009000A000D001400210042000000000016001D000D000E001100120015003E00110012001100240011001200150067000D000E00000000001E00200009000A000000000009000A000D003C0009000A0009001C0009000A000D004B000000000009000A000D004B00000000004C00820009000A0009001C0009000A000D0047000000000009000A000D003C0009000A0009001C0009000A000D0049000000000009000A000D005900000000005A008E0009000A0009001C0009000A000D004E000000000009000A000D006500000000006600A10009000A0009001C0009000A000D0054000900310009002B00090047000900270009004D00090047000900280009005D0009005C000900590009001E00000000001F004D0009004A00090044000900550009004300090051000900510009001E000000000011002E001100170011002E001100170011002E0011001700110017000900780009002E000900100026002C00000000001200220009000A000D00320000000000330052000D00C90009000A002300250000000000000000000900100026002C00000000001200220009000A000D00320000000000330052000D00CE0009000A002300250000000000000000000900100026002D00000000001200220009000A000D00320000000000330052000D00D40009000A00230025000000000000000000090026000000000009000A000D0023000D00C80009000A00090036000000000009000A000D002C000D0056000D002E000D0034000D002A0009000A0009002600090029000900320009000A000D0035000D002A000D004E000D0035000D0032000D0064000D0046000D003B000D0088000D002A000D0068000D002B000D00550009000A0009001C0009000A000D0052000000000009000A000D0022000D002900000000001100710009000A0009001C0009000A000D00450005000600F200000024000000B7100000010001002C000000000000000100000018000000000000001F00008005006E00F40000000800000001000000000000001000000000000000240000003C00000054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF120000000140200005500000001000000250000000100000001000000010000003D00000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C00000018000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200251100000000040000000100636C725F73656E645F6963735F696E7669746500000016002911000000000400000001003036303030303031000016002511000000002408000001002E6363746F7200000000160029110000000024080000010030363030303030330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF77093101010000000B00108E0C0084690D0006005C0000003C0000002C00000058000000000000000000000016000000190000000000EEC00000000000000000FFFF000000000000FFFFFFFF00000000FFFF0000000000000000000000000A0088080000000000002C1200000100000000000000000000000000000053746F72656450726F636564757265730043444135313336460000002DBA2EF10100000000000000B71000000000000000000000000000000000000001000000B71000002C00000000000000000000000000000000000000020002000D01000000000100FFFFFFFF00000000E31000000802000000000000FFFFFFFF00000000FFFFFFFF010001000000010000000000433A5C55736572735C757365725C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000000FEEFFEEF010000000100000000010000000000000000000000FFFFFFFFFFFFFFFFFFFF0900FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E310108AFE65C01000000DB4BB0BA851E604CB6E8EA221D2B5706770000002F4C696E6B496E666F002F6E616D6573002F7372632F686561646572626C6F636B002F7372632F66696C65732F633A5C75736572735C757365725C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000400000006000000010000001B00000000000000220000000800000011000000070000000A00000006000000000000000500000000000000DC513301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E00000020000000D3000000380000008B0100003800000000000000BA000000800000005C00000028000000C81A0000440200002C0000006C000000030000001F000000060000001E000000070000000A0000000B00000008000000090000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001D0000001C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 AS N'sql_clr_ics.pdb'; - + ADD FILE FROM 0x4D6963726F736F667420432F432B2B204D534620372E30300D0A1A4453000000000200000200000023000000A80000000000000021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38000000FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA3101380000000010000000100000000000000E00FFFF04000000FFFF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA3101380000000010000000100000000000000F00FFFF04000000FFFF0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E3101BD35EA5C010000004221EEC2CD07384D8DE1547ADD0CF7D800000000000000000100000001000000000000000000000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BCA310138000000001000000010000000000000FFFFFFFF04000000FFFF030000000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F862513FC607D311905300C04FA302A1C4454B99E9E6D211903F00C04FA302A10B9D865A1166D311BD2A0000F80849BDEC1618FF5EAA104D87F76F496383346014000000000000009788B1BF12207E15F6496BC0ED4D3C583A2CD83300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003A110000000000003A110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEEFFEEF01000000A600000000433A5C55736572735C656974616E2E626C756D696E5C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E63730000633A5C75736572735C656974616E2E626C756D696E5C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E637300040000005300000000000000010000005400000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001BE2300180000000FFBFA66E8E13D501010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000001000000010000000000000054000000280000001BE23001742080655C000000010000005300000054000000650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003E002A11000000005C080000000000000E110000000000000000000001000006000000000100000000636C725F73656E645F6963735F696E76697465000000001600031104000000EC0600000E11000000000000010000000A0024115553797374656D00120024115553797374656D2E54657874000000000E0024115553797374656D2E4E657400160024115553797374656D2E4E65742E4D61696C000000001A0024115553797374656D2E446174612E53716C54797065730000001A0024115553797374656D2E446174612E53716C436C69656E7400001E002411554D6963726F736F66742E53716C5365727665722E536572766572001E0020110000000001000011000000000000000063726564656E7469616C730022002011010000000100001100000000000000006D61696C5072696F72697479000000001E0020110200000001000011000000000000000073625F4572726F727300000026002011030000000100001100000000000000006D6574686F645F656E756D76616C7565000000002A0020110400000001000011000000000000000073656E73697469766974795F656E756D76616C75650000002A00201105000000010000110000000000000000726563697069656E745F726F6C655F666F756E64000000002E00201106000000010000110000000000000000636F70795F726563697069656E745F726F6C655F666F756E640000003200201107000000010000110000000000000000626C696E645F636F70795F726563697069656E745F726F6C655F666F756E640016002011080000000100001100000000000000006D7367001E00201109000000010000110000000000000000736D7470636C69656E74000016000311440000002C030000F50100003800000001000000160020110B000000010000110000000000000000636F6E00160020110C000000010000110000000000000000636D6400160003117C020000F40200005A0000007100000001000000160020110E0000000100001100000000000000007264720002000600160003117C020000280300001A0100000A01000001000000160020111000000001000011000000000000000072647200020006000200060016000311440000006403000089000000F1060000010000001A0020113A0000000100001100000000000000006974656D00000000020006001600031144000000D40300003D000000CD080000010000001E002011460000000100001100000000000000006174745F70617468000000001600031168030000D00300001C000000ED0800000100000016002011470000000100001100000000000000006500000002000600020006001600031144000000080400001A00000032090000010000001600201148000000010000110000000000000000650000000200060016000311440000003C0400001A0000008F09000001000000160020114A00000001000011000000000000000065000000020006001600031144000000700400001A000000CB09000001000000160020114B00000001000011000000000000000065000000020006001600031144000000A40400001A000000280A000001000000160020114D00000001000011000000000000000065000000020006001600031144000000D80400001A000000850A000001000000160020114F0000000100001100000000000000006500000002000600160003114400000010060000EC040000AF0A00000100000026002011510000000100001100000000000000006963735F636F6E74656E74735F737472000000001E00201152000000010000110000000000000000727376705F737472696E67002A002011530000000100001100000000000000006F7267616E697A65725F696E5F726563697069656E74730016000311DC0400009C0500006C000000E70C0000010000001A0020115700000001000011000000000000000061646472000000000200060016000311DC040000D40500006C0000007C0D0000010000001A0020115A00000001000011000000000000000061646472000000000200060016000311DC0400000C0600006C000000110E0000010000001A0020115D00000001000011000000000000000061646472000000000200060002000600160003114400000080060000F8000000A20F0000010000001A00201161000000010000110000000000000000636F6E74797065001A002011620000000100001100000000000000006176426F647900001A00201163000000010000110000000000000000617643616C000000020006001600031144000000B40600001A0000009C10000001000000160020116400000001000011000000000000000065000000020006001600031144000000E80600001A000000F31000000100000016002011660000000100001100000000000000006500000002000600020006006A010404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004020000040000000C00000001000700040600003C010000014D01809C0194D7019839019928019AD9019B05019B3601A19701BBF102811F0181AD0182220282650183880283CB01884B0288860289AD0289FF028A49028AA1028AE2028B3100028BA0028CD4028D38028D9A028DDE00028E39028E90028ECD028F04028F50028FB402901502907B0290EE0291130291490291EF0292A30292ED0293410293A30293D3029420000295030295970297480298020298EE0299E9079B6A099B6A019B6A029BA2029C34029CD5029D88029E2E029EF0029FC602A0B602A26007A29609A29601A29601A37701A4A302A53A01A5CA01A6A702A73C01A7D802A87201A92102AA1001AA4F01B26E01B2E902AD8F02B05E06B31901B31902B35E06B49D01B49D02B4E206B62601B62602B66C02B7B602B90301BD6C01BE3B01BF2001C000401002C000412801C00041D1020006002E002A1100000000C0080000000000002C0000000000000000000000030000060E11000001000000002E6363746F72002E000404C93FEAC6B359D649BC250902BBABB460000000004D0044003200000004010000040100000C0000000100000602000600F20000002412000000000000010001000E11000000000000810100001812000000000000320000800100000035000080070000003C00008031000000EEEFFE80380000003D000080390000003E000080450000003F0000804E0000004000008056000000420000805F000000EEEFFE8063000000430000806400000044000084710000004A0000807A0000004B0000807B0000004C00008087000000EEEFFE808B0000004D0000808C0000004E000080940000004F0000809C00000050000080A700000053000080A800000054000080B200000055000080B300000056000080BB00000057000080BE000000EEEFFE80CA000000EEEFFE80CB00000058000080CC0000005A00008AD900000066000080F1000000670000800A01000069000080130100006A000080140100006B00008020010000EEEFFE80240100006C000080250100006D0000802D0100006E000080350100006F0000804C010000720000804D0100007300008056010000EEEFFE805A0100007300008064010000740000806D010000EEEFFE8071010000740000807B0100007500008084010000EEEFFE80880100007500008092010000760000809B010000EEEFFE809F01000076000080A901000077000080B2010000EEEFFE80B601000077000080C001000078000080C9010000EEEFFE80CD01000078000080E501000079000080FD010000EEEFFE8001020000790000800B0200007A0000800C0200007B000080140200007C00008017020000EEEFFE8023020000EEEFFE80240200007D0000802C0200007E0000802D0200008400008047020000EEEFFE804B02000084000080570200008500008071020000EEEFFE80750200008500008081020000860000808A020000EEEFFE808E020000860000809A02000087000080A3020000EEEFFE80A702000087000080C702000088000080D0020000EEEFFE80D402000088000080F402000089000080FD020000EEEFFE8001030000890000800A0300008A00008013030000EEEFFE80170300008A0000801F0300008B00008028030000EEEFFE802C0300008B000080340300008C0000804E030000EEEFFE80520300008C0000805E0300008D00008078030000EEEFFE807C0300008D000080880300008E000080A2030000EEEFFE80A60300008E000080B203000090000080CC030000EEEFFE80D003000090000080DC03000091000080E5030000EEEFFE80E903000091000080F203000092000080FB030000EEEFFE80FF03000092000080070400009400008021040000EEEFFE80250400009500008026040000960000802E040000970000803104000099000080320400009A0000804C040000EEEFFE80500400009A0000805C0400009B000080700400009C000080710400009E0000807A040000EEEFFE807E0400009E0000808A0400009F00008093040000EEEFFE80970400009F000080A3040000A0000080AC040000EEEFFE80B0040000A0000080BC040000A2000080C5040000EEEFFE80C9040000A2000080D5040000A3000080DE040000EEEFFE80E2040000A300008000050000A400008009050000EEEFFE800D050000A40000802D050000AA00008033050000AC0000804D050000EEEFFE8051050000AC0000805D050000AD000084A8050000EEEFFE80AC050000B2000080B8050000B4000080E1050000EEEFFE80E5050000B4000080FD050000B500008011060000EEEFFE8015060000B500008046060000B60000805A060000EEEFFE805E060000B60000808F060000B7000080A3060000EEEFFE80A7060000B7000080D8060000B9000080DB060000BA000080DE060000BB000080E1060000BD000080E2060000BD000080EC060000EEEFFE80F1060000BD000080F8060000BE000080F9060000BF00008015070000EEEFFE8019070000C00000801A070000C10000801D070000C20000801E070000C30000803A070000EEEFFE803E070000C40000803F070000C500008042070000C600008043070000C70000805F070000EEEFFE8063070000C800008064070000C900008067070000CA00008068070000CB00008072070000EEEFFE8076070000CC00008077070000CD00008079070000CF0000807A070000EEEFFE8080070000BD0000808B070000D10000809E070000EEEFFE80A2070000D1000080C4070000D2000080D7070000EEEFFE80DB070000D2000080FD070000D300008010080000EEEFFE8014080000D300008036080000D500008041080000EEEFFE8045080000D500008056080000DB0000805D080000DC0000806C080000DD0000807B080000DE00008084080000DF0000809D080000E1000080A9080000EEEFFE80AD080000E2000080AE080000E3000080AF080000E3000080CB080000EEEFFE80CD080000E3000080D4080000E4000080D5080000E6000080D6080000E7000080EA080000E8000080ED080000E9000080EF080000EA000080F0080000EB00008009090000ED0000800A090000EEEFFE8010090000E300008018090000EE00008019090000EEEFFE801A090000F10000801B090000F20000802F090000F300008032090000F400008034090000F500008035090000F60000804C090000EEEFFE804D090000FA0000804E090000FB0000806B090000EEEFFE806F090000FB0000808C090000FC0000808F090000FD00008091090000FE00008092090000FF000080A9090000EEEFFE80AA09000003010080AB09000004010080C809000005010080CB09000006010080CD09000007010080CE09000008010080E5090000EEEFFE80E60900000C010080E70900000D010080040A0000EEEFFE80080A00000D010080250A00000E010080280A00000F0100802A0A0000100100802B0A000011010080420A0000EEEFFE80430A000015010080440A000016010080610A0000EEEFFE80650A000016010080820A000017010080850A000018010080870A000019010080880A00001A0100809F0A000021010080A80A0000EEEFFE80AF0A000022010080B00A000023010080B70A000024010080C40A000025010080DD0A000026010080EA0A000027010080080B000028010080260B00002A010080330B00002B010080510B00002C0100806F0B00002D0100808D0B00002E010080990B0000EEEFFE809D0B00002E010080B60B00002F010080CF0B000030010080E80B000031010080200C000032010080390C000033010080570C000034010080750C000036010080780C0000EEEFFE808D0C0000390100809A0C00003A0100809C0C00003C010080A90C00003D010080AB0C00003F010080B80C000040010080BA0C000042010080BC0C000045010080D30C000046010080D60C000048010080D70C000048010080E50C0000EEEFFE80E70C000048010080F00C000049010080F10C00004A0100800B0D0000EEEFFE800F0D00004A010080120D00004B010080520D00004C010080530D0000480100805E0D0000EEEFFE806A0D0000EEEFFE806B0D00004E0100806C0D00004E0100807A0D0000EEEFFE807C0D00004E010080850D00004F010080860D000050010080A00D0000EEEFFE80A40D000050010080A70D000051010080E70D000052010080E80D00004E010080F30D0000EEEFFE80FF0D0000EEEFFE80000E000054010080010E0000540100800F0E0000EEEFFE80110E0000540100801A0E0000550100801B0E000056010080350E0000EEEFFE80390E0000560100803C0E0000570100807C0E0000580100807D0E000054010080880E0000EEEFFE80940E0000EEEFFE80950E00005A0100809C0E0000EEEFFE80A00E00005B010080A10E00005C010080B50E00005D010080DF0E00005E010080E00E000060010080150F0000EEEFFE80190F0000610100801A0F000062010080270F000063010080450F000064010080520F0000650100805F0F0000660100806C0F0000670100806D0F0000690100807A0F00006A010080870F00006C0100809A0F00006D0100809B0F000073010080A20F000076010080A30F000077010080B20F000078010080C10F000079010080D00F00007A010080DF0F00007B010080E80F00007C010080F40F00007D0100800B1000007E0100802210000080010080541000008101008063100000820100807310000083010080821000008501008099100000860100809C100000870100809E100000880100809F10000089010080B6100000EEEFFE80B710000091010080B810000092010080C210000093010080D0100000EEEFFE80D410000094010080F010000095010080F310000096010080F510000097010080F6100000980100800D1100009C0100800500060009005400090070000000000009000A000D004E000D0032000D0018000D002500000000000D000E0011001A0018003F00110012001500260000000000150016001900250019002500190068001500160019003C0015001600150021001100120000000000000000000D000E000D0022000D0034000D00490014003B000D000E00110022000000000011001200150021001500210015006C001100120015002D00000000002E00510015002900000000002A00490015003000000000003100570015002500000000002600400015002B00000000002C004E00150038000000000039006E0015004B00000000004C006B001100120011001D000D000E0000000000000000000D00190009000A0009004300000000004400630009004B00000000004C006100090022000000000023004300090023000000000024005A00090021000000000022005600090025000000000026003C0009002100000000002200360009002B00000000002C004B0009004300000000004400630009004900000000004A00600009004B00000000004C00630009005300000000005400720009001900000000001A00240009001F000000000020003300090045000000000009000A000D002C0009000A0009000A000D004900000000004A0058000D00510009000A0009002400000000002500490009002900000000002A00530009002F000000000030005F0009001B00000000001C002F0009001D00000000001E004C000900250000000000260053000900370009004D00000000004E00930009000D00000000000D00870009004800000000004900B90009005200000000005300EB0009005A00000000005B00FA0009004600000000004700E80009002B000900300009003600090010001E0027000000000012001A0009000A000D004500000000000D000E0011002D000D000E000D004F00000000000D000E00110032000D000E000D005B00000000000D000E00110038000D000E000D006600000000000D000E001100170009000A00000000001B001D0009003900000000003A00C10009004300000000004400D50009004F00000000005000ED0009002200000000002300770009002D000900250009001F000900250009003800090026000000000009000A000D0014002600470000000000160022000D000E00110012001500430011001200110024001100120015006C000D000E00000000002300250009000A000000000009000A000D003C0009000A0009001C0009000A000D004B000000000009000A000D004B00000000004C00820009000A0009001C0009000A000D0047000000000009000A000D003C0009000A0009001C0009000A000D0049000000000009000A000D005900000000005A008E0009000A0009001C0009000A000D004E000000000009000A000D006500000000006600A10009000A0009001C0009000A000D005400090021000000000009000A000D0042000D003C000D0058000D0038000D005E000D0058000D0039000D006E000D006D000D006A000D0022000000000023005E000D005B000D0057000D009C000D0056000D0062000D0062000D0022000000000015003F0015001B0015003F0015001B0015003F0015001B0015001B000D007C000D0032000D0014002A00300000000000160026000D000E001100360000000000370056001100DA000D000E002700290000000000000000000D0014002A00300000000000160026000D000E001100360000000000370056001100DF000D000E002700290000000000000000000D0014002A00310000000000160026000D000E001100360000000000370056001100E5000D000E002700290000000000000000000D002A00000000000D000E00110027001100D9000D000E000D003A00000000000D000E0011003D001100670011003F001100450011003B000D000E000D0037000D003A000D00380009000A000900320009000A000D0035000D002A000D004E000D0035000D0032000D0064000D0039000D003B000D00B7000D002C000D006C000D002B000D00550009000A0009001C0009000A000D0052000000000009000A000D0022000D002900000000001100710009000A0009001C0009000A000D00450005000600F2000000240000000E110000010001002C000000000000000100000018000000000000001F00008005006E00F40000000800000001000000000000001000000000000000240000003C00000054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF120000000140200005500000001000000250000000100000001000000010000003D00000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C00000018000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200251100000000040000000100636C725F73656E645F6963735F696E7669746500000016002911000000000400000001003036303030303031000016002511000000006008000001002E6363746F7200000000160029110000000060080000010030363030303030330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000FFFFFFFF1A092FF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF77093101010000000B00108E0C0084690D0006005C0000003C0000002C00000060000000000000000000000016000000190000000000EEC00000000000000000FFFF000000000000FFFFFFFF00000000FFFF0000000000000000000000000A00C408000000000000681200000100000000000000000000000000000053746F72656450726F636564757265730043444135313336460000002DBA2EF101000000000000000E11000000000000000000000000000000000000010000000E1100002C00000000000000000000000000000000000000020002000D01000000000100FFFFFFFF000000003A1100000802000000000000FFFFFFFF00000000FFFFFFFF010001000000010000000000433A5C55736572735C656974616E2E626C756D696E5C536F757263655C5265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000000FEEFFEEF010000000100000000010000000000000000000000FFFFFFFFFFFFFFFFFFFF0900FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942E3101BD35EA5C010000004221EEC2CD07384D8DE1547ADD0CF7D87F0000002F4C696E6B496E666F002F6E616D6573002F7372632F686561646572626C6F636B002F7372632F66696C65732F633A5C75736572735C656974616E2E626C756D696E5C736F757263655C7265706F735C73716C5F636C725F6963735C73716C5F636C725F6963735C636C725F73656E645F6963735F696E766974652E6373000400000006000000010000001B00000000000000220000000800000011000000070000000A00000006000000000000000500000000000000DC51330100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E00000020000000DB00000038000000930100003800000000000000CA000000800000005C00000028000000401B0000440200002C0000006C000000030000001F000000060000001E000000070000000A0000000B00000008000000090000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001D0000001C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 AS N'sql_clr_ics.pdb'; GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO +PRINT N'Creating [dbo].[clr_send_ics_invite]...'; +GO CREATE PROCEDURE [dbo].[clr_send_ics_invite] +@profile_name NVARCHAR (MAX) NULL, @recipients NVARCHAR (MAX) NULL, @copy_recipients NVARCHAR (MAX) NULL, @blind_copy_recipients NVARCHAR (MAX) NULL, @from_address NVARCHAR (MAX) NULL, @reply_to NVARCHAR (MAX) NULL, @subject NVARCHAR (MAX) NULL, @body NVARCHAR (MAX) NULL, @body_format NVARCHAR (MAX) NULL, @importance NVARCHAR (MAX) NULL, @sensitivity NVARCHAR (MAX) NULL, @file_attachments NVARCHAR (MAX) NULL, @location NVARCHAR (MAX) NULL, @start_time_utc DATETIME NULL, @end_time_utc DATETIME NULL, @timestamp_utc DATETIME NULL, @method NVARCHAR (MAX) NULL, @sequence INT NULL, @prod_id NVARCHAR (MAX) NULL, @use_reminder BIT NULL, @reminder_minutes INT NULL, @require_rsvp BIT NULL, @recipients_role NVARCHAR (MAX) NULL, @copy_recipients_role NVARCHAR (MAX) NULL, @blind_copy_recipients_role NVARCHAR (MAX) NULL, @smtp_servername NVARCHAR (MAX) NULL, @port INT NULL, @enable_ssl BIT NULL, @use_default_credentials BIT NULL, @username NVARCHAR (MAX) NULL, @password NVARCHAR (MAX) NULL, @suppress_info_messages BIT NULL, @event_identifier NVARCHAR (MAX) NULL OUTPUT, @ics_contents NVARCHAR (MAX) NULL OUTPUT +AS EXTERNAL NAME [sql_clr_ics].[StoredProcedures].[clr_send_ics_invite] +GO +PRINT N'Creating [dbo].[sp_send_calendar_event]...'; +GO +/* + sql_clr_ics copyright (c) Eitan Blumin +--------------------------------------------------- +Source: https://github.com/EitanBlumin/sql_clr_ics +License: MIT (https://github.com/EitanBlumin/sql_clr_ics/blob/master/LICENSE) +--------------------------------------------------- +This serves as a wrapper for the CLR stored procedure with default values for parameters +(which is not possible natively for all data types in the CLR procedure itself) +*/ +CREATE PROCEDURE [dbo].[sp_send_calendar_event] @profile_name [sysname] = NULL, - @recipients [nvarchar](4000) = NULL, - @copy_recipients [nvarchar](4000) = NULL, - @blind_copy_recipients [nvarchar](4000) = NULL, - @from_address [nvarchar](4000) = NULL, - @reply_to [nvarchar](4000) = NULL, + @recipients [nvarchar](max) = NULL, + @copy_recipients [nvarchar](max) = NULL, + @blind_copy_recipients [nvarchar](max) = NULL, + @from_address [nvarchar](max) = NULL, + @reply_to [nvarchar](max) = NULL, @subject [nvarchar](255) = N'SQL Server Meeting', - @body [nvarchar](4000) = NULL, + @body [nvarchar](max) = NULL, @body_format [nvarchar](20) = N'TEXT', @importance [nvarchar](6) = N'Normal', @sensitivity [nvarchar](12) = N'Public', - @file_attachments [nvarchar](4000) = NULL, - @location [nvarchar](4000) = NULL, + @file_attachments [nvarchar](max) = NULL, + @location [nvarchar](255) = NULL, @start_time_utc [datetime] = NULL, @end_time_utc [datetime] = NULL, @timestamp_utc [datetime] = NULL, @method [nvarchar](14) = N'REQUEST', @sequence [int] = 0, - @prod_id [nvarchar](4000) = NULL, + @prod_id [nvarchar](255) = NULL, @use_reminder [bit] = 1, @reminder_minutes [int] = 15, @require_rsvp [bit] = 0, @recipients_role [nvarchar](15) = N'REQ-PARTICIPANT', @copy_recipients_role [nvarchar](15) = N'OPT-PARTICIPANT', @blind_copy_recipients_role [nvarchar](15) = N'NON-PARTICIPANT', - @smtp_servername [nvarchar](4000) = N'localhost', + @smtp_servername [nvarchar](255) = N'localhost', @port [int] = 25, @enable_ssl [bit] = 0, @use_default_credentials [bit] = 0, - @username [nvarchar](4000) = NULL, - @password [nvarchar](4000) = NULL, + @username [nvarchar](255) = NULL, + @password [nvarchar](255) = NULL, @suppress_info_messages [bit] = 0, - @event_identifier [nvarchar](4000) = NULL OUTPUT + @event_identifier [nvarchar](255) = NULL OUTPUT, + @ics_contents [nvarchar](MAX) = NULL OUTPUT WITH EXECUTE AS CALLER AS -EXTERNAL NAME [sql_clr_ics].[StoredProcedures].[clr_send_ics_invite] +SET NOCOUNT ON; +EXEC dbo.[clr_send_ics_invite] @profile_name, @recipients, @copy_recipients, @blind_copy_recipients, @from_address, @reply_to, @subject, @body, @body_format, @importance, @sensitivity, @file_attachments, @location, @start_time_utc, @end_time_utc, @timestamp_utc, @method, @sequence, @prod_id, @use_reminder, @reminder_minutes, @require_rsvp, @recipients_role, @copy_recipients_role, @blind_copy_recipients_role, @smtp_servername, @port, @enable_ssl, @use_default_credentials, @username, @password, @suppress_info_messages, @event_identifier OUTPUT, @ics_contents OUTPUT GO \ No newline at end of file From f41f29f65745564c27109b1b098da95b65af0c2c Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sun, 26 May 2019 10:31:26 +0300 Subject: [PATCH 23/27] added iCal spec links + the ics_contents parameter --- README.md | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 327566a..b7d192a 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ exec sp_send_calendar_event [ , [ @password = ] 'password' ] [ , [ @suppress_info_messages = ] 1 | 0 ] [ , [ @event_identifier = ] 'event_identifier' [ OUTPUT ] ] + [ , [ @ics_contents = ] 'ics_contents' [ OUTPUT ] ] ``` ## Arguments @@ -58,7 +59,7 @@ exec sp_send_calendar_event `[ @recipients = ] 'recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. + Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. `[ @copy_recipients = ] 'copy_recipients [ ; ...n ]'` @@ -101,11 +102,13 @@ exec sp_send_calendar_event - Normal - High - Defaults to Normal. + Defaults to Normal. + + The parameter is implemented using the [System.Net.Mail.MailPriority](https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.mailpriority) enum, and maps to the [PRIORITY property of the iCal spec](https://www.kanzaki.com/docs/ical/priority.html), based on a CUA with a three-level priority scheme. `[ @sensitivity = ] 'PUBLIC | PRIVATE | CONFIDENTIAL'` - Is the sensitivity classification of the message. The parameter is of type **nvarchar(12)**. The parameter may contain one of the following values: + Is the sensitivity classification of the message. The parameter is of type **nvarchar(12)**. The parameter may contain one of the following values, as per the [CLASS property of the iCal spec](https://www.kanzaki.com/docs/ical/class.html): - Public - Private @@ -119,23 +122,23 @@ exec sp_send_calendar_event `[ @location = ] 'location'` - Is the location of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of NULL. + Is the location of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of NULL. The parameter maps to the [LOCATION property of the iCal spec](https://www.kanzaki.com/docs/ical/location.html). `[ @start_time_utc = ] 'start_time_utc'` - Is the start time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@timestamp_utc** + 5 hours. + Is the start time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@timestamp_utc** + 5 hours. The parameter maps to the [DTSTART property of the iCal spec](https://www.kanzaki.com/docs/ical/dtstart.html) `[ @end_time_utc = ] 'end_time_utc'` - Is the end time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@start_time_utc** + 1 hour. + Is the end time of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to **@start_time_utc** + 1 hour. The parameter maps to the [DTEND property of the iCal spec](https://www.kanzaki.com/docs/ical/dtend.html). `[ @timestamp_utc = ] 'timestamp_utc'` - Is the DTSTAMP property of the calendar meeting, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to current UTC time. + Is the date and time when the calendar event was created, in UTC. The parameter is of type **datetime**. If the parameter is not specified, it defaults to current UTC time. The parameter maps to the [DTSTAMP property of the iCal spec](https://www.kanzaki.com/docs/ical/dtstamp.html). `[ @method = ] 'PUBLISH | REQUEST | REPLY | CANCEL | ADD | REFRESH | COUNTER | DECLINECOUNTER'` - Is the method of the calendar event message. The parameter is of type **nvarchar(14)**. The parameter may contain one of the following values: + Is the method of the calendar event message. The parameter is of type **nvarchar(14)**. The parameter may contain one of the following values, as per the [METHOD property of the iCalendar Transport-independent Interoperability Protocol (iTIP)](https://documentation.open-xchange.com/7.10.1/middleware/components/calendar/iTip.html#methods): - PUBLISH - REQUEST @@ -150,27 +153,27 @@ exec sp_send_calendar_event `[ @sequence = ] sequence` - Is the sequence of the calendar event message. The parameter is of type **int**, with a default of 0. Unless **@method** is specified as 'CANCEL', in which case the default would be 1. Proper usage of this parameter is important when updating existing calendar events, since each consecutive update must have a higher sequence number than the one before it. + Is the sequence of the calendar event message. The parameter is of type **int**, with a default of 0. Unless **@method** is specified as 'CANCEL', in which case the default would be 1. Proper usage of this parameter is important when updating existing calendar events, since each consecutive update must have a higher sequence number than the one before it. This parameter maps to the [SEQUENCE property of the iCal spec](https://www.kanzaki.com/docs/ical/sequence.html). `[ @prod_id = ] 'prod_id'` - Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of 'Schedule a Meeting'. + Is the PRODID property of the calendar meeting. The parameter is of type **nvarchar(255)**, with a default of 'Schedule a Meeting'. This parameter maps to the [PRODID property of the iCal spec](https://www.kanzaki.com/docs/ical/prodid.html). `[ @use_reminder = ] 1 | 0` - Determines whether to add a reminder to the event. The parameter is of type **bit**, with a default of 1 (true). + Determines whether to add a reminder to the event. The parameter is of type **bit**, with a default of 1 (true), which adds a [VALARM component](https://www.kanzaki.com/docs/ical/valarm.html) to the iCal document. `[ @reminder_minutes = ] reminder_minutes` - Is the number of minutes to set for the event reminder. The parameter is of type **int**, with a default of 15. + Is the number of minutes to set for the event reminder. The parameter is of type **int**, with a default of 15. The parameter maps to the [TRIGGER property of the iCal spec](https://www.kanzaki.com/docs/ical/trigger.html). `[ @require_rsvp = ] 1 | 0` - Determines whether participants are required to respond with an RSVP. The parameter is of type **bit**, with a default of 0 (false). If this parameter equals to 0 (false), then all participants are assumed to have accepted their invitation, without requesting a response. + Determines whether participants are required to respond with an RSVP. The parameter is of type **bit**, with a default of 0 (false). If this parameter equals to 0 (false), then all participants are assumed to have accepted their invitation, without requesting a response. The parameter maps to the [PARTSTAT](https://www.kanzaki.com/docs/ical/partstat.html) and [RSVP](https://www.kanzaki.com/docs/ical/rsvp.html) properties of the iCal spec. `[ @recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR'` - Is the meeting role for the participants specified in the **@recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: + Is the meeting role for the participants specified in the **@recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values, as per the [ROLE property of the iCal spec](https://www.kanzaki.com/docs/ical/role.html): - REQ-PARTICIPANT - OPT-PARTICIPANT @@ -181,7 +184,7 @@ Defaults to REQ-PARTICIPANT. `[ @copy_recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR'` - Is the meeting role for the participants specified in the **@copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: + Is the meeting role for the participants specified in the **@copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values, as per the [ROLE property of the iCal spec](https://www.kanzaki.com/docs/ical/role.html): - REQ-PARTICIPANT - OPT-PARTICIPANT @@ -192,7 +195,7 @@ Defaults to OPT-PARTICIPANT. `[ @blind_copy_recipients_role = ] 'REQ-PARTICIPANT | OPT-PARTICIPANT | NON-PARTICIPANT | CHAIR'` - Is the meeting role for the participants specified in the **@blind_copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values: + Is the meeting role for the participants specified in the **@blind_copy_recipients** parameter. The parameter is of type **nvarchar(15)**. The parameter may contain one of the following values, as per the [ROLE property of the iCal spec](https://www.kanzaki.com/docs/ical/role.html): - REQ-PARTICIPANT - OPT-PARTICIPANT @@ -234,7 +237,11 @@ Defaults to NON-PARTICIPANT. `[ @event_identifier = ] 'event_identifier' [ OUTPUT ]` - Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(255)**. + Optional output parameter returns the *event_identifier* of the calendar meeting. You may also override this value by specifying a parameter with a non-null value for it, in order to uniquely identify a calendar event. If no *event_identifier* was specified, a Global Unique Identifier (Guid) will automatically be generated instead. This parameter must be specified when **@method** is 'CANCEL'. The *event_identifier* is of type **nvarchar(255)**, and maps to the [UID property of the iCal spec](https://www.kanzaki.com/docs/ical/uid.html). + +`[ @ics_contents = ] 'ics_contents' [ OUTPUT ]` + + Optional output parameter returns the entire ICS attachment contents, as per the [iCal standard specifications](https://www.kanzaki.com/docs/ical/) for a **VCALENDAR** document with a **VEVENT** calendar component. This value is constructed dynamically based on the previous parameters that you can specify. However, you may also override this value by specifying a parameter with a non-null value for it, in order to completely ignore all the iCal-related parameters of the procedure, and try to send your own custom-made ICS attachment file. This means that you can construct your own VCALENDAR document, and try to implement various advanced functionalities not natively covered by **sp_send_calendar_event**, or even send a calendar component other than VEVENT, such as [VTODO](https://www.kanzaki.com/docs/ical/vtodo.html) or [VJOURNAL](https://www.kanzaki.com/docs/ical/vjournal.html). ## Result Sets @@ -341,13 +348,9 @@ More info in [the license file](https://github.com/EitanBlumin/sql_clr_ics/blob/ ## Acknowledgements -This project was based mostly on the following stack overflow discussion: - -[https://stackoverflow.com/questions/22734403/send-email-to-outlook-with-ics-meeting-appointment](https://stackoverflow.com/questions/22734403/send-email-to-outlook-with-ics-meeting-appointment) - -Also used the iCal specification for further improvements: +This project was based mostly on the following stack overflow discussion: [Send email to Outlook with ics meeting appointment](https://stackoverflow.com/questions/22734403/send-email-to-outlook-with-ics-meeting-appointment) -[https://www.kanzaki.com/docs/ical/](https://www.kanzaki.com/docs/ical/) +Also used the [RFC 2445 iCalendar specification](https://www.ietf.org/rfc/rfc2445.txt) as reference for further improvements and fine-tuning. ## See Also [sp_send_dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) From e71d7911666fa58513679fb736b7a1cb2294b550 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sun, 26 May 2019 10:41:53 +0300 Subject: [PATCH 24/27] added missing iCal links + ics_contents default --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b7d192a..0ea18b0 100644 --- a/README.md +++ b/README.md @@ -59,19 +59,19 @@ exec sp_send_calendar_event `[ @recipients = ] 'recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. + Is a semicolon-delimited list of e-mail addresses to send the message to. The recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. This parameter maps to the [ATTENDEE property of the iCal spec](https://www.kanzaki.com/docs/ical/attendee.html). `[ @copy_recipients = ] 'copy_recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. + Is a semicolon-delimited list of e-mail addresses to carbon copy the message to. The copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. This parameter maps to the [ATTENDEE property of the iCal spec](https://www.kanzaki.com/docs/ical/attendee.html). `[ @blind_copy_recipients = ] 'blind_copy_recipients [ ; ...n ]'` - Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. + Is a semicolon-delimited list of e-mail addresses to blind carbon copy the message to. The blind copy recipients list is of type **nvarchar(max)**. Although this parameter is optional, at least one of **@recipients**, **@copy_recipients**, or **@blind_copy_recipients** must be specified, or **sp_send_calendar_event** returns an error. This parameter maps to the [ATTENDEE property of the iCal spec](https://www.kanzaki.com/docs/ical/attendee.html). `[ @from_address = ] 'from_address'` - Is the value of the 'from address' of the email message, and the organizer of the calendar meeting. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(max)**. If no parameter is specified, the default is NULL. + Is the value of the 'from address' of the email message, and the organizer of the calendar meeting. This is an optional parameter used to override the settings in the mail profile (or if no mail profile was specified). This parameter is of type **nvarchar(max)**. If no parameter is specified, the default is NULL. This parameter maps to the [ORGANIZER property of the iCal spec](https://www.kanzaki.com/docs/ical/organizer.html). `[ @reply_to = ] 'reply_to'` @@ -79,11 +79,11 @@ exec sp_send_calendar_event `[ @subject = ] 'subject'` - Is the subject of the e-mail message. The subject is of type **nvarchar(255)**. If no subject is specified, the default is 'SQL Server Meeting'. + Is the subject of the e-mail message. The subject is of type **nvarchar(255)**. If no subject is specified, the default is 'SQL Server Meeting'. This parameter maps to the [SUMMARY property of the iCal spec](https://www.kanzaki.com/docs/ical/summary.html). `[ @body = ] 'body'` - Is the body of the e-mail message. The message body is of type **nvarchar(max)**, with a default of NULL. + Is the body of the e-mail message. The message body is of type **nvarchar(max)**, with a default of NULL. This parameter maps to the [DESCRIPTION property of the iCal spec](https://www.kanzaki.com/docs/ical/description.html). `[ @body_format = ] 'TEXT | HTML'` @@ -241,7 +241,7 @@ Defaults to NON-PARTICIPANT. `[ @ics_contents = ] 'ics_contents' [ OUTPUT ]` - Optional output parameter returns the entire ICS attachment contents, as per the [iCal standard specifications](https://www.kanzaki.com/docs/ical/) for a **VCALENDAR** document with a **VEVENT** calendar component. This value is constructed dynamically based on the previous parameters that you can specify. However, you may also override this value by specifying a parameter with a non-null value for it, in order to completely ignore all the iCal-related parameters of the procedure, and try to send your own custom-made ICS attachment file. This means that you can construct your own VCALENDAR document, and try to implement various advanced functionalities not natively covered by **sp_send_calendar_event**, or even send a calendar component other than VEVENT, such as [VTODO](https://www.kanzaki.com/docs/ical/vtodo.html) or [VJOURNAL](https://www.kanzaki.com/docs/ical/vjournal.html). + Optional output parameter returns the entire ICS attachment contents, as per the [iCal standard specifications](https://www.kanzaki.com/docs/ical/) for a **VCALENDAR** document with a **VEVENT** calendar component. The parameter is of type **nvarchar(max)**, with a default of NULL. This value is constructed dynamically based on the previous parameters that you can specify. However, you may also override this value by specifying a parameter with a non-null value for it, in order to completely ignore all the iCal-related parameters of the procedure, and try to send your own custom-made ICS attachment file. This means that you can construct your own VCALENDAR document, and try to implement various advanced functionalities not natively covered by **sp_send_calendar_event**, or even send a calendar component other than VEVENT, such as [VTODO](https://www.kanzaki.com/docs/ical/vtodo.html) or [VJOURNAL](https://www.kanzaki.com/docs/ical/vjournal.html). ## Result Sets From d634e91983ff85c57667d6c75b5af6adcad90de0 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sun, 26 May 2019 16:10:11 +0300 Subject: [PATCH 25/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0ea18b0..68af6a5 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ The CLR assembly in this project can only be deployed to a database with the **t ## Installation If you have SSDT, you can open the SQL server project and publish it to your database of choice. -Alternatively, you can use [this simple installation script](https://github.com/EitanBlumin/sql_clr_ics/blob/master/sql_clr_ics/sql_clr_ics_install.sql) that sets everything up for you in your database of choice. +Alternatively, you can use [this simple installation script](https://raw.githubusercontent.com/EitanBlumin/sql-clr-ics/v2.0/sql_clr_ics/sql_clr_ics_install.sql) that sets everything up for you in your database of choice. ## Syntax From 8bff4c52712e680f1e02558ee8dfbc3eea803557 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Sun, 26 May 2019 20:21:07 +0300 Subject: [PATCH 26/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68af6a5..23fdb29 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ exec sp_send_calendar_event `[ @body_format = ] 'TEXT | HTML'` - Is the format of the message body. The parameter is of type **varchar(20)**, with a default of NULL. When specified, the headers of the outgoing message are set to indicate that the message body has the specified format. The parameter may contain one of the following values: + Is the format of the message body. The parameter is of type **varchar(20)**. When specified, the headers of the outgoing message are set to indicate that the message body has the specified format. The parameter may contain one of the following values: - TEXT - HTML From 6ac94456bc984eccee8a3627c27d3658c37cabd7 Mon Sep 17 00:00:00 2001 From: Eitan Blumin Date: Wed, 5 Jun 2019 10:15:37 +0300 Subject: [PATCH 27/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23fdb29..f283732 100644 --- a/README.md +++ b/README.md @@ -306,7 +306,7 @@ EXEC sp_send_calendar_event @username = N'the_organizer@gmail.com', @password = N'NotActuallyMyPassword', @require_rsvp = 1, - @cancel_event_identifier = @EventID, + @method = 'CANCEL', @event_identifier = @EventID OUTPUT SELECT EventID = @EventID