From 2693cb17ba62d53a1f4b82cd1d47576452566bfc Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Fri, 8 Dec 2023 13:43:48 -0600 Subject: [PATCH 01/26] Add obsolete warning to Orchestrator classes (#6711) Co-authored-by: Tracy Boehrer --- .../OrchestratorBotComponent.cs | 2 ++ .../OrchestratorRecognizer.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorBotComponent.cs b/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorBotComponent.cs index 09cbcb60b8..a213632d5d 100644 --- a/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorBotComponent.cs +++ b/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorBotComponent.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; using Microsoft.Bot.Builder.Dialogs.Declarative; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -11,6 +12,7 @@ namespace Microsoft.Bot.Builder.AI.Orchestrator /// /// Define component assets for Orchestrator. /// + [Obsolete("The Bot Framework Orchestrator will be deprecated in the next version of the Bot Framework SDK.")] public class OrchestratorBotComponent : BotComponent { /// diff --git a/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorRecognizer.cs b/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorRecognizer.cs index f40e8de1f2..a7942b4986 100644 --- a/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorRecognizer.cs +++ b/libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorRecognizer.cs @@ -24,6 +24,7 @@ namespace Microsoft.Bot.Builder.AI.Orchestrator /// /// Class that represents an adaptive Orchestrator recognizer. /// + [Obsolete("The Bot Framework Orchestrator will be deprecated in the next version of the Bot Framework SDK.")] public class OrchestratorRecognizer : AdaptiveRecognizer { /// From 77958564511c2fdce55e2bf5726b26cbf2c0e25a Mon Sep 17 00:00:00 2001 From: Jhonatan Sandoval Velasco <122501764+JhontSouth@users.noreply.github.com> Date: Thu, 14 Dec 2023 09:50:42 -0500 Subject: [PATCH 02/26] include HEAD method to http requests (#6713) --- .../Actions/HttpRequest.cs | 10 ++++++++-- .../Schemas/Actions/Microsoft.HttpRequest.schema | 3 ++- .../Microsoft.Bot.Builder.TestBot.Json/testbot.schema | 6 ++++-- tests/tests.schema | 3 ++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs index 2e4292bb36..2222d800ec 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs @@ -126,7 +126,12 @@ public enum HttpMethod /// /// Http DELETE. /// - DELETE + DELETE, + + /// + /// Http HEAD. + /// + HEAD } /// @@ -315,7 +320,8 @@ public enum HttpMethod } break; - case HttpMethod.DELETE: + case HttpMethod.DELETE: + case HttpMethod.HEAD: response = await client.SendAsync(request, cancellationToken).ConfigureAwait(false); break; } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema index 315d36ccb9..c9f918a2a2 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema @@ -31,7 +31,8 @@ "POST", "PATCH", "PUT", - "DELETE" + "DELETE", + "HEAD" ], "examples": [ "GET", diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema index 59fd9e1194..e7751e6417 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema @@ -3607,7 +3607,8 @@ "POST", "PATCH", "PUT", - "DELETE" + "DELETE", + "HEAD" ], "examples": [ "GET", @@ -9216,7 +9217,8 @@ "POST", "PATCH", "PUT", - "DELETE" + "DELETE", + "HEAD" ], "examples": [ "GET", diff --git a/tests/tests.schema b/tests/tests.schema index 85383b5cd6..ad41a31b42 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -3868,7 +3868,8 @@ "POST", "PATCH", "PUT", - "DELETE" + "DELETE", + "HEAD" ], "examples": [ "GET", From 822ae31831ed4b9ec19dbcdee17dcbd9aa0f5b02 Mon Sep 17 00:00:00 2001 From: fangyangci <133664123+fangyangci@users.noreply.github.com> Date: Tue, 19 Dec 2023 22:43:50 +0800 Subject: [PATCH 03/26] fix: USGovSingleTenant OAuthEndpoint (#6714) * fixUSGovSingleTenant * Add UT * Rollback AuthTenant Property Name * The Ctor do contains the old ones, Add Ctor to ApiCompatBaseline --- ApiCompatBaseline.txt | 11 +++- .../Authentication/AppCredentials.cs | 38 ++++++++++-- .../GovernmentAuthenticationConstants.cs | 16 ++++- ...vernmentCloudBotFrameworkAuthentication.cs | 2 +- .../Authentication/MicrosoftAppCredentials.cs | 62 +------------------ .../MicrosoftGovernmentAppCredentials.cs | 52 +++++----------- .../MsalServiceClientCredentialsFactory.cs | 16 +++-- .../PasswordServiceClientCredentialFactory.cs | 4 +- .../MicrosoftAppCredentialsTests.cs | 58 ++++++++++------- .../MicrosoftGovernmentAppCredentialsTests.cs | 57 ++++++++++++++--- 10 files changed, 174 insertions(+), 142 deletions(-) diff --git a/ApiCompatBaseline.txt b/ApiCompatBaseline.txt index dd119bc045..1beec09e2b 100644 --- a/ApiCompatBaseline.txt +++ b/ApiCompatBaseline.txt @@ -3,9 +3,18 @@ TypesMustExist : Type 'Microsoft.Bot.Builder.Azure.CosmosDbCustomClientOptions' TypesMustExist : Type 'Microsoft.Bot.Builder.Azure.CosmosDbStorage' does not exist in the implementation but it does exist in the contract. TypesMustExist : Type 'Microsoft.Bot.Builder.Azure.CosmosDbStorageOptions' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials..ctor(System.String, System.String)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials..ctor(System.String, System.String, System.Net.Http.HttpClient)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials..ctor(System.String, System.String, System.Net.Http.HttpClient, Microsoft.Extensions.Logging.ILogger)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials..ctor(System.String, System.String, System.String, System.Net.Http.HttpClient)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials..ctor(System.String, System.String, System.String, System.Net.Http.HttpClient, Microsoft.Extensions.Logging.ILogger)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftGovernmentAppCredentials..ctor(System.String, System.String, System.Net.Http.HttpClient)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftGovernmentAppCredentials..ctor(System.String, System.String, System.Net.Http.HttpClient, Microsoft.Extensions.Logging.ILogger)' does not exist in the implementation but it does exist in the contract. + TypesMustExist : Type 'Microsoft.Bot.Connector.Authentication.AdalAuthenticator' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.AppCredentials.BuildAuthenticator()' does not exist in the implementation but it does exist in the contract. CannotAddAbstractMembers : Member 'Microsoft.Bot.Connector.Authentication.AppCredentials.BuildIAuthenticator()' is abstract in the implementation but is missing in the contract. MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.CertificateAppCredentials..ctor(Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate, System.String, System.Net.Http.HttpClient, Microsoft.Extensions.Logging.ILogger)' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.CertificateAppCredentials.BuildAuthenticator()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.BuildAuthenticator()' does not exist in the implementation but it does exist in the contract. \ No newline at end of file +MembersMustExist : Member 'Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.BuildAuthenticator()' does not exist in the implementation but it does exist in the contract. + diff --git a/libraries/Microsoft.Bot.Connector/Authentication/AppCredentials.cs b/libraries/Microsoft.Bot.Connector/Authentication/AppCredentials.cs index bc2e335099..73eebe442b 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/AppCredentials.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/AppCredentials.cs @@ -34,6 +34,8 @@ public abstract class AppCredentials : ServiceClientCredentials /// private Lazy _authenticator; + private string _oAuthScope; + /// /// Initializes a new instance of the class. /// @@ -54,7 +56,7 @@ public AppCredentials(string channelAuthTenant = null, HttpClient customHttpClie /// The scope for the token. public AppCredentials(string channelAuthTenant = null, HttpClient customHttpClient = null, ILogger logger = null, string oAuthScope = null) { - OAuthScope = string.IsNullOrWhiteSpace(oAuthScope) ? AuthenticationConstants.ToChannelFromBotOAuthScope : oAuthScope; + _oAuthScope = oAuthScope; ChannelAuthTenant = channelAuthTenant; CustomHttpClient = customHttpClient; Logger = logger ?? NullLogger.Instance; @@ -74,13 +76,15 @@ public AppCredentials(string channelAuthTenant = null, HttpClient customHttpClie /// /// Tenant to be used for channel authentication. /// - public string ChannelAuthTenant + public virtual string ChannelAuthTenant { - get => string.IsNullOrEmpty(AuthTenant) ? AuthenticationConstants.DefaultChannelAuthTenant : AuthTenant; + get => string.IsNullOrEmpty(AuthTenant) + ? DefaultChannelAuthTenant + : AuthTenant; set { // Advanced user only, see https://aka.ms/bots/tenant-restriction - var endpointUrl = string.Format(CultureInfo.InvariantCulture, AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, value); + var endpointUrl = string.Format(CultureInfo.InvariantCulture, ToChannelFromBotLoginUrlTemplate, value); if (Uri.TryCreate(endpointUrl, UriKind.Absolute, out _)) { @@ -99,7 +103,7 @@ public string ChannelAuthTenant /// /// The OAuth endpoint to use. /// - public virtual string OAuthEndpoint => string.Format(CultureInfo.InvariantCulture, AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, ChannelAuthTenant); + public virtual string OAuthEndpoint => string.Format(CultureInfo.InvariantCulture, ToChannelFromBotLoginUrlTemplate, ChannelAuthTenant); /// /// Gets a value indicating whether to validate the Authority. @@ -115,7 +119,9 @@ public string ChannelAuthTenant /// /// The OAuth scope to use. /// - public virtual string OAuthScope { get; } + public virtual string OAuthScope => string.IsNullOrEmpty(_oAuthScope) + ? ToChannelFromBotOAuthScope + : _oAuthScope; /// /// Gets or sets the channel auth token tenant for this credential. @@ -141,6 +147,26 @@ public string ChannelAuthTenant /// protected ILogger Logger { get; set; } + /// + /// Gets DefaultChannelAuthTenant. + /// + /// DefaultChannelAuthTenant. + protected virtual string DefaultChannelAuthTenant => AuthenticationConstants.DefaultChannelAuthTenant; + + /// + /// Gets ToChannelFromBotOAuthScope. + /// + /// ToChannelFromBotOAuthScope. + protected virtual string ToChannelFromBotOAuthScope => AuthenticationConstants.ToChannelFromBotOAuthScope; + + /// + /// Gets ToChannelFromBotLoginUrlTemplate. + /// + /// ToChannelFromBotLoginUrlTemplate. +#pragma warning disable CA1056 // Uri properties should not be strings + protected virtual string ToChannelFromBotLoginUrlTemplate => AuthenticationConstants.ToChannelFromBotLoginUrlTemplate; +#pragma warning restore CA1056 // Uri properties should not be strings + /// /// Adds the host of service url to trusted hosts. /// diff --git a/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs b/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs index e961808ffd..6bfb1989d8 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs @@ -14,10 +14,24 @@ public static class GovernmentAuthenticationConstants public const string ChannelService = "https://botframework.azure.us"; /// - /// TO GOVERNMENT CHANNEL FROM BOT: Login URL. + /// TO CHANNEL FROM BOT: Login URL. + /// + /// DEPRECATED. For binary compat only. /// public const string ToChannelFromBotLoginUrl = "https://login.microsoftonline.us/MicrosoftServices.onmicrosoft.us"; + /// + /// TO CHANNEL FROM BOT: Login URL template string. Bot developer may specify + /// which tenant to obtain an access token from. By default, the channels only + /// accept tokens from "MicrosoftServices.onmicrosoft.us". For more details see https://aka.ms/bots/tenant-restriction. + /// + public const string ToChannelFromBotLoginUrlTemplate = "https://login.microsoftonline.us/{0}"; + + /// + /// The default tenant to acquire bot to channel token from. + /// + public const string DefaultChannelAuthTenant = "MicrosoftServices.onmicrosoft.us"; + /// /// TO GOVERNMENT CHANNEL FROM BOT: OAuth scope to request. /// diff --git a/libraries/Microsoft.Bot.Connector/Authentication/GovernmentCloudBotFrameworkAuthentication.cs b/libraries/Microsoft.Bot.Connector/Authentication/GovernmentCloudBotFrameworkAuthentication.cs index 545720488d..6403417df1 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/GovernmentCloudBotFrameworkAuthentication.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/GovernmentCloudBotFrameworkAuthentication.cs @@ -12,7 +12,7 @@ internal class GovernmentCloudBotFrameworkAuthentication : BuiltinBotFrameworkAu public GovernmentCloudBotFrameworkAuthentication(ServiceClientCredentialsFactory credentialFactory, AuthenticationConfiguration authConfiguration, IHttpClientFactory httpClientFactory, ILogger logger = null) : base( GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope, - GovernmentAuthenticationConstants.ToChannelFromBotLoginUrl, + GovernmentAuthenticationConstants.ToChannelFromBotLoginUrlTemplate, CallerIdConstants.USGovChannel, GovernmentAuthenticationConstants.ChannelService, GovernmentAuthenticationConstants.OAuthUrlGov, diff --git a/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftAppCredentials.cs b/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftAppCredentials.cs index add80a0471..dc1cec4942 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftAppCredentials.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftAppCredentials.cs @@ -38,39 +38,6 @@ public class MicrosoftAppCredentials : AppCredentials /// public static readonly MicrosoftAppCredentials Empty = new MicrosoftAppCredentials(null, null); - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - public MicrosoftAppCredentials(string appId, string password) - : this(appId, password, null, null, null, null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - /// Optional to be used when acquiring tokens. - public MicrosoftAppCredentials(string appId, string password, HttpClient customHttpClient) - : this(appId, password, null, customHttpClient) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - /// Optional to be used when acquiring tokens. - /// Optional to gather telemetry data while acquiring and managing credentials. - public MicrosoftAppCredentials(string appId, string password, HttpClient customHttpClient, ILogger logger) - : this(appId, password, null, customHttpClient, logger) - { - } - /// /// Initializes a new instance of the class. /// @@ -79,36 +46,11 @@ public MicrosoftAppCredentials(string appId, string password, HttpClient customH /// Optional to be used when acquiring tokens. /// Optional to gather telemetry data while acquiring and managing credentials. /// The scope for the token. - public MicrosoftAppCredentials(string appId, string password, HttpClient customHttpClient, ILogger logger, string oAuthScope) + public MicrosoftAppCredentials(string appId, string password, HttpClient customHttpClient = null, ILogger logger = null, string oAuthScope = null) : this(appId, password, null, customHttpClient, logger, oAuthScope) { } - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - /// Optional. The oauth token tenant. - /// Optional to be used when acquiring tokens. - public MicrosoftAppCredentials(string appId, string password, string channelAuthTenant, HttpClient customHttpClient) - : this(appId, password, channelAuthTenant, customHttpClient, null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - /// Optional. The oauth token tenant. - /// Optional to be used when acquiring tokens. - /// Optional to gather telemetry data while acquiring and managing credentials. - public MicrosoftAppCredentials(string appId, string password, string channelAuthTenant, HttpClient customHttpClient, ILogger logger = null) - : this(appId, password, channelAuthTenant, customHttpClient, logger, null) - { - } - /// /// Initializes a new instance of the class. /// @@ -118,7 +60,7 @@ public MicrosoftAppCredentials(string appId, string password, string channelAuth /// Optional to be used when acquiring tokens. /// Optional to gather telemetry data while acquiring and managing credentials. /// The scope for the token. - public MicrosoftAppCredentials(string appId, string password, string channelAuthTenant, HttpClient customHttpClient, ILogger logger = null, string oAuthScope = null) + public MicrosoftAppCredentials(string appId, string password, string channelAuthTenant, HttpClient customHttpClient = null, ILogger logger = null, string oAuthScope = null) : base(channelAuthTenant, customHttpClient, logger, oAuthScope) { MicrosoftAppId = appId; diff --git a/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftGovernmentAppCredentials.cs b/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftGovernmentAppCredentials.cs index 7839abbc11..50df6fa1a7 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftGovernmentAppCredentials.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftGovernmentAppCredentials.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System.Globalization; using System.Net.Http; using Microsoft.Extensions.Logging; @@ -16,29 +17,6 @@ public class MicrosoftGovernmentAppCredentials : MicrosoftAppCredentials /// public static new readonly MicrosoftGovernmentAppCredentials Empty = new MicrosoftGovernmentAppCredentials(null, null, null, null, GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope); - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - /// Optional to be used when acquiring tokens. - public MicrosoftGovernmentAppCredentials(string appId, string password, HttpClient customHttpClient = null) - : this(appId, password, customHttpClient, null, GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The Microsoft app ID. - /// The Microsoft app password. - /// Optional to be used when acquiring tokens. - /// Optional to gather telemetry data while acquiring and managing credentials. - public MicrosoftGovernmentAppCredentials(string appId, string password, HttpClient customHttpClient, ILogger logger) - : this(appId, password, customHttpClient, logger, GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope) - { - } - /// /// Initializes a new instance of the class. /// @@ -47,8 +25,8 @@ public MicrosoftGovernmentAppCredentials(string appId, string password, HttpClie /// Optional to be used when acquiring tokens. /// Optional to gather telemetry data while acquiring and managing credentials. /// The scope for the token (defaults to if null). - public MicrosoftGovernmentAppCredentials(string appId, string password, HttpClient customHttpClient, ILogger logger, string oAuthScope = null) - : this(appId, password, tenantId: string.Empty, customHttpClient, logger, oAuthScope) + public MicrosoftGovernmentAppCredentials(string appId, string password, HttpClient customHttpClient = null, ILogger logger = null, string oAuthScope = null) + : base(appId, password, customHttpClient, logger, oAuthScope) { } @@ -57,24 +35,22 @@ public MicrosoftGovernmentAppCredentials(string appId, string password, HttpClie /// /// The Microsoft app ID. /// The Microsoft app password. - /// Tenant ID of the Azure AD tenant where the bot is created. + /// Optional. The oauth token tenant. /// Optional to be used when acquiring tokens. /// Optional to gather telemetry data while acquiring and managing credentials. /// The scope for the token (defaults to if null). - public MicrosoftGovernmentAppCredentials(string appId, string password, string tenantId, HttpClient customHttpClient, ILogger logger, string oAuthScope = null) - : base(appId, password, tenantId, customHttpClient, logger, oAuthScope ?? GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope) + public MicrosoftGovernmentAppCredentials(string appId, string password, string channelAuthTenant, HttpClient customHttpClient = null, ILogger logger = null, string oAuthScope = null) + : base(appId, password, channelAuthTenant, customHttpClient, logger, oAuthScope) { } - /// - /// Gets the OAuth endpoint to use. - /// - /// - /// The OAuth endpoint to use. - /// - public override string OAuthEndpoint - { - get { return GovernmentAuthenticationConstants.ToChannelFromBotLoginUrl; } - } + /// + protected override string DefaultChannelAuthTenant => GovernmentAuthenticationConstants.DefaultChannelAuthTenant; + + /// + protected override string ToChannelFromBotOAuthScope => GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope; + + /// + protected override string ToChannelFromBotLoginUrlTemplate => GovernmentAuthenticationConstants.ToChannelFromBotLoginUrlTemplate; } } diff --git a/libraries/Microsoft.Bot.Connector/Authentication/MsalServiceClientCredentialsFactory.cs b/libraries/Microsoft.Bot.Connector/Authentication/MsalServiceClientCredentialsFactory.cs index 986917c0ea..7b39e34008 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/MsalServiceClientCredentialsFactory.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/MsalServiceClientCredentialsFactory.cs @@ -59,22 +59,28 @@ public override Task CreateCredentialsAsync(string app } // Public cloud: default authority, optional scope when authenticating for skill communication. - if (loginEndpoint.StartsWith(AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, StringComparison.OrdinalIgnoreCase)) + if (loginEndpoint.Equals(AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, StringComparison.OrdinalIgnoreCase)) { return Task.FromResult( - new MsalAppCredentials(_clientApplication, appId, authority: null, scope: audience, validateAuthority: validateAuthority, logger: _logger)); + new MsalAppCredentials( + _clientApplication, + appId, + authority: null, + scope: audience, + validateAuthority: validateAuthority, + logger: _logger)); } // Legacy gov: Set the authority (login url) to the legacy gov url, and allow for passed in scope for skill auth in // gov, or otherwise leave the default channel scope for gov. - if (loginEndpoint.Equals(GovernmentAuthenticationConstants.ToChannelFromBotLoginUrl, StringComparison.OrdinalIgnoreCase)) + if (loginEndpoint.Equals(GovernmentAuthenticationConstants.ToChannelFromBotLoginUrlTemplate, StringComparison.OrdinalIgnoreCase)) { return Task.FromResult( new MsalAppCredentials( _clientApplication, appId, - authority: GovernmentAuthenticationConstants.ToChannelFromBotLoginUrl, - scope: audience ?? GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope, + authority: null, + scope: audience, validateAuthority: validateAuthority, logger: _logger)); } diff --git a/libraries/Microsoft.Bot.Connector/Authentication/PasswordServiceClientCredentialFactory.cs b/libraries/Microsoft.Bot.Connector/Authentication/PasswordServiceClientCredentialFactory.cs index ca4050ea90..5319b78f95 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/PasswordServiceClientCredentialFactory.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/PasswordServiceClientCredentialFactory.cs @@ -93,12 +93,12 @@ public override Task CreateCredentialsAsync(string app throw new InvalidOperationException($"Invalid appId {appId} does not match expected {AppId}"); } - if (loginEndpoint.StartsWith(AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, StringComparison.OrdinalIgnoreCase)) + if (loginEndpoint.Equals(AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, StringComparison.OrdinalIgnoreCase)) { return Task.FromResult(new MicrosoftAppCredentials( appId, Password, TenantId, _httpClient, _logger, oauthScope)); } - else if (loginEndpoint.Equals(GovernmentAuthenticationConstants.ToChannelFromBotLoginUrl, StringComparison.OrdinalIgnoreCase)) + else if (loginEndpoint.Equals(GovernmentAuthenticationConstants.ToChannelFromBotLoginUrlTemplate, StringComparison.OrdinalIgnoreCase)) { return Task.FromResult(new MicrosoftGovernmentAppCredentials( appId, Password, TenantId, _httpClient, _logger, oauthScope)); diff --git a/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftAppCredentialsTests.cs b/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftAppCredentialsTests.cs index 9298ee05d3..1b71835568 100644 --- a/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftAppCredentialsTests.cs +++ b/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftAppCredentialsTests.cs @@ -1,10 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System.Net.Http; +using System.Globalization; using Microsoft.Bot.Connector.Authentication; -using Microsoft.Extensions.Logging; -using Moq; using Xunit; namespace Microsoft.Bot.Connector.Tests.Authentication @@ -15,30 +13,48 @@ public class MicrosoftAppCredentialsTests public void ConstructorTests() { var defaultScopeCase1 = new MicrosoftAppCredentials("someApp", "somePassword"); - Assert.Equal(AuthenticationConstants.ToChannelFromBotOAuthScope, defaultScopeCase1.OAuthScope); + AssertEqual(defaultScopeCase1, null, null); - using (var customHttpClient = new HttpClient()) - { - // Use with default scope - var defaultScopeCase2 = new MicrosoftAppCredentials("someApp", "somePassword", customHttpClient); - Assert.Equal(AuthenticationConstants.ToChannelFromBotOAuthScope, defaultScopeCase2.OAuthScope); + var defaultScopeCase2 = new MicrosoftAppCredentials("someApp", "somePassword", oAuthScope: "customScope"); + AssertEqual(defaultScopeCase2, null, "customScope"); - var logger = new Mock().Object; - var defaultScopeCase3 = new MicrosoftAppCredentials("someApp", "somePassword", customHttpClient, logger); - Assert.Equal(AuthenticationConstants.ToChannelFromBotOAuthScope, defaultScopeCase3.OAuthScope); + var defaultScopeCase3 = new MicrosoftAppCredentials("someApp", "somePassword", "someTenant"); + AssertEqual(defaultScopeCase3, "someTenant", null); - var defaultScopeCase4 = new MicrosoftAppCredentials("someApp", "somePassword", "someTenant", customHttpClient); - Assert.Equal(AuthenticationConstants.ToChannelFromBotOAuthScope, defaultScopeCase4.OAuthScope); + var defaultScopeCase4 = new MicrosoftAppCredentials("someApp", "somePassword", "someTenant", oAuthScope: "customScope"); + AssertEqual(defaultScopeCase4, "someTenant", "customScope"); + } - var defaultScopeCase5 = new MicrosoftAppCredentials("someApp", "somePassword", "someTenant", customHttpClient, logger); - Assert.Equal(AuthenticationConstants.ToChannelFromBotOAuthScope, defaultScopeCase5.OAuthScope); + private void AssertEqual(MicrosoftAppCredentials credential, string tenantId, string oauthScope) + { + Assert.Equal( + string.Format(CultureInfo.InvariantCulture, AuthenticationConstants.ToChannelFromBotLoginUrlTemplate, credential.ChannelAuthTenant), + credential.OAuthEndpoint); - // Use custom scope - var customScopeCase1 = new MicrosoftAppCredentials("someApp", "somePassword", customHttpClient, logger, "customScope"); - Assert.Equal("customScope", customScopeCase1.OAuthScope); + if (string.IsNullOrEmpty(oauthScope)) + { + Assert.Equal( + AuthenticationConstants.ToChannelFromBotOAuthScope, + credential.OAuthScope); + } + else + { + Assert.Equal( + oauthScope, + credential.OAuthScope); + } - var customScopeCase2 = new MicrosoftAppCredentials("someApp", "somePassword", "someTenant", customHttpClient, logger, "customScope"); - Assert.Equal("customScope", customScopeCase2.OAuthScope); + if (string.IsNullOrEmpty(tenantId)) + { + Assert.Equal( + AuthenticationConstants.DefaultChannelAuthTenant, + credential.ChannelAuthTenant); + } + else + { + Assert.Equal( + tenantId, + credential.ChannelAuthTenant); } } } diff --git a/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftGovernmentAppCredentialsTests.cs b/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftGovernmentAppCredentialsTests.cs index 5ffda0042b..323eaac4eb 100644 --- a/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftGovernmentAppCredentialsTests.cs +++ b/tests/Microsoft.Bot.Connector.Tests/Authentication/MicrosoftGovernmentAppCredentialsTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System.Globalization; using Microsoft.Bot.Connector.Authentication; using Xunit; @@ -39,13 +40,6 @@ public void GovernmentAuthenticationConstants_ChannelService_IsRight() Assert.Equal("https://botframework.azure.us", GovernmentAuthenticationConstants.ChannelService); } - [Fact] - public void GovernmentAuthenticationConstants_ToChannelFromBotLoginUrl_IsRight() - { - // This value should not change - Assert.Equal("https://login.microsoftonline.us/MicrosoftServices.onmicrosoft.us", GovernmentAuthenticationConstants.ToChannelFromBotLoginUrl); - } - [Fact] public void GovernmentAuthenticationConstants_ToChannelFromBotOAuthScope_IsRight() { @@ -73,5 +67,54 @@ public void GovernmentAuthenticationConstants_ToBotFromChannelOpenIdMetadataUrl_ // This value should not change Assert.Equal("https://login.botframework.azure.us/v1/.well-known/openidconfiguration", GovernmentAuthenticationConstants.ToBotFromChannelOpenIdMetadataUrl); } + + [Fact] + public void ConstructorTests() + { + var defaultScopeCase1 = new MicrosoftGovernmentAppCredentials("someApp", "somePassword"); + AssertEqual(defaultScopeCase1, null, null); + + var defaultScopeCase2 = new MicrosoftGovernmentAppCredentials("someApp", "somePassword", oAuthScope: "customScope"); + AssertEqual(defaultScopeCase2, null, "customScope"); + + var defaultScopeCase3 = new MicrosoftGovernmentAppCredentials("someApp", "somePassword", "someTenant"); + AssertEqual(defaultScopeCase3, "someTenant", null); + + var defaultScopeCase4 = new MicrosoftGovernmentAppCredentials("someApp", "somePassword", "someTenant", oAuthScope: "customScope"); + AssertEqual(defaultScopeCase4, "someTenant", "customScope"); + } + + private void AssertEqual(MicrosoftGovernmentAppCredentials credential, string tenantId, string oauthScope) + { + Assert.Equal( + string.Format(CultureInfo.InvariantCulture, GovernmentAuthenticationConstants.ToChannelFromBotLoginUrlTemplate, credential.ChannelAuthTenant), + credential.OAuthEndpoint); + + if (string.IsNullOrEmpty(oauthScope)) + { + Assert.Equal( + GovernmentAuthenticationConstants.ToChannelFromBotOAuthScope, + credential.OAuthScope); + } + else + { + Assert.Equal( + oauthScope, + credential.OAuthScope); + } + + if (string.IsNullOrEmpty(tenantId)) + { + Assert.Equal( + GovernmentAuthenticationConstants.DefaultChannelAuthTenant, + credential.ChannelAuthTenant); + } + else + { + Assert.Equal( + tenantId, + credential.ChannelAuthTenant); + } + } } } From 744e5ef0f1c768e010b42f1bd297405902f1a7bc Mon Sep 17 00:00:00 2001 From: fangyangci <133664123+fangyangci@users.noreply.github.com> Date: Tue, 19 Dec 2023 22:50:51 +0800 Subject: [PATCH 04/26] feat: Add Ase channel validation. (#6718) * fixUSGovSingleTenant * Add UT * AseChannelValidation * Add UT * Rollback AuthTenant Property Name * The Ctor do contains the old ones, Add Ctor to ApiCompatBaseline --- .../Authentication/AseChannelValidation.cs | 199 ++++++++++++++++++ .../Authentication/AuthenticationConstants.cs | 5 + .../GovernmentAuthenticationConstants.cs | 5 + .../Authentication/JwtTokenValidation.cs | 5 + ...ParameterizedBotFrameworkAuthentication.cs | 5 + ...ConfigurationBotFrameworkAuthentication.cs | 2 + .../Authentication/JwtTokenExtractorTests.cs | 5 +- .../Authentication/JwtTokenValidationTests.cs | 55 +++++ 8 files changed, 278 insertions(+), 3 deletions(-) create mode 100644 libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs diff --git a/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs b/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs new file mode 100644 index 0000000000..923d7c0f0c --- /dev/null +++ b/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs @@ -0,0 +1,199 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.IdentityModel.Tokens; + +namespace Microsoft.Bot.Connector.Authentication +{ + /// + /// Validates and Examines JWT tokens from the AseChannel. + /// + [Obsolete("Use `ConfigurationBotFrameworkAuthentication` instead to perform AseChannel validation.", false)] + public static class AseChannelValidation + { + /// + /// Just used for app service extension v2 (independent app service). + /// + public const string ChannelId = "AseChannel"; + + /// + /// TO BOT FROM AseChannel: Token validation parameters when connecting to a channel. + /// + public static readonly TokenValidationParameters BetweenBotAndAseChannelTokenValidationParameters = + new TokenValidationParameters() + { + ValidateIssuer = true, + + // Audience validation takes place manually in code. + ValidateAudience = false, // lgtm[cs/web/missing-token-validation] + ValidateLifetime = true, + ClockSkew = TimeSpan.FromMinutes(5), + RequireSignedTokens = true, + }; + + private static string _metadataUrl; + private static ICredentialProvider _credentialProvider; + private static HttpClient _authHttpClient = new HttpClient(); + + /// + /// Set up user issue/metadataUrl for AseChannel validation. + /// + /// App Configurations, will GetSection MicrosoftAppId/MicrosoftAppTenantId/ChannelService. + public static void Init(IConfiguration configuration) + { + var appId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + var tenantId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppTenantIdKey)?.Value; + + var channelService = configuration.GetSection("ChannelService")?.Value; + + _credentialProvider = new SimpleCredentialProvider(appId, string.Empty); + _metadataUrl = new SimpleChannelProvider(channelService).IsGovernment() + ? GovernmentAuthenticationConstants.ToBotFromEmulatorOpenIdMetadataUrl + : AuthenticationConstants.ToBotFromEmulatorOpenIdMetadataUrl; + + var tenantIds = new string[] + { + tenantId, + "f8cdef31-a31e-4b4a-93e4-5f571e91255a", // US Gov MicrosoftServices.onmicrosoft.us + "d6d49420-f39b-4df7-a1dc-d59a935871db" // Public botframework.com + }; + + var validIssuers = new HashSet(); + foreach (var tmpId in tenantIds) + { + validIssuers.Add($"https://sts.windows.net/{tmpId}/"); // Auth Public/US Gov, 1.0 token + validIssuers.Add($"https://login.microsoftonline.com/{tmpId}/v2.0"); // Auth Public, 2.0 token + validIssuers.Add($"https://login.microsoftonline.us/{tmpId}/v2.0"); // Auth for US Gov, 2.0 token + } + + BetweenBotAndAseChannelTokenValidationParameters.ValidIssuers = validIssuers; + } + + /// + /// Determines if a request from AseChannel. + /// + /// need to be same with ChannelId. + /// True, if the token was issued by the AseChannel. Otherwise, false. + public static bool IsAseChannel(string channelId) + { + return channelId == ChannelId; + } + + /// + /// Validate the incoming Auth Header as a token sent from the AseChannel. + /// + /// The raw HTTP header in the format: "Bearer [longString]". + /// Authentication of tokens requires calling out to validate Endorsements and related documents. The + /// HttpClient is used for making those calls. Those calls generally require TLS connections, which are expensive to + /// setup and teardown, so a shared HttpClient is recommended. + /// + /// A valid ClaimsIdentity. + /// + public static async Task AuthenticateAseTokenAsync( + string authHeader, + HttpClient httpClient = default) + { + httpClient = httpClient ?? _authHttpClient; + + return await AuthenticateAseTokenAsync(authHeader, httpClient, new AuthenticationConfiguration()).ConfigureAwait(false); + } + + /// + /// Validate the incoming Auth Header as a token sent from the AseChannel. + /// + /// The raw HTTP header in the format: "Bearer [longString]". + /// Authentication of tokens requires calling out to validate Endorsements and related documents. The + /// HttpClient is used for making those calls. Those calls generally require TLS connections, which are expensive to + /// setup and teardown, so a shared HttpClient is recommended. + /// The authentication configuration. + /// + /// A valid ClaimsIdentity. + /// + public static async Task AuthenticateAseTokenAsync(string authHeader, HttpClient httpClient, AuthenticationConfiguration authConfig) + { + if (authConfig == null) + { + throw new ArgumentNullException(nameof(authConfig)); + } + + var tokenExtractor = new JwtTokenExtractor( + httpClient, + BetweenBotAndAseChannelTokenValidationParameters, + _metadataUrl, + AuthenticationConstants.AllowedSigningAlgorithms); + + var identity = await tokenExtractor.GetIdentityAsync(authHeader, ChannelId, authConfig.RequiredEndorsements).ConfigureAwait(false); + if (identity == null) + { + // No valid identity. Not Authorized. + throw new UnauthorizedAccessException("Invalid Identity"); + } + + if (!identity.IsAuthenticated) + { + // The token is in some way invalid. Not Authorized. + throw new UnauthorizedAccessException("Token Not Authenticated"); + } + + // Now check that the AppID in the claimset matches + // what we're looking for. Note that in a multi-tenant bot, this value + // comes from developer code that may be reaching out to a service, hence the + // Async validation. + Claim versionClaim = identity.Claims.FirstOrDefault(c => c.Type == AuthenticationConstants.VersionClaim); + if (versionClaim == null) + { + throw new UnauthorizedAccessException("'ver' claim is required on AseChannel Tokens."); + } + + string tokenVersion = versionClaim.Value; + string appID = string.Empty; + + // The AseChannel, depending on Version, sends the AppId via either the + // appid claim (Version 1) or the Authorized Party claim (Version 2). + if (string.IsNullOrWhiteSpace(tokenVersion) || tokenVersion == "1.0") + { + // either no Version or a version of "1.0" means we should look for + // the claim in the "appid" claim. + Claim appIdClaim = identity.Claims.FirstOrDefault(c => c.Type == AuthenticationConstants.AppIdClaim); + if (appIdClaim == null) + { + // No claim around AppID. Not Authorized. + throw new UnauthorizedAccessException("'appid' claim is required on AseChannel Token version '1.0'."); + } + + appID = appIdClaim.Value; + } + else if (tokenVersion == "2.0") + { + // AseChannel, "2.0" puts the AppId in the "azp" claim. + Claim appZClaim = identity.Claims.FirstOrDefault(c => c.Type == AuthenticationConstants.AuthorizedParty); + if (appZClaim == null) + { + // No claim around AppID. Not Authorized. + throw new UnauthorizedAccessException("'azp' claim is required on AseChannel Token version '2.0'."); + } + + appID = appZClaim.Value; + } + else + { + // Unknown Version. Not Authorized. + throw new UnauthorizedAccessException($"Unknown AseChannel Token version '{tokenVersion}'."); + } + + if (!await _credentialProvider.IsValidAppIdAsync(appID).ConfigureAwait(false)) + { + await Console.Out.WriteLineAsync(appID).ConfigureAwait(false); + } + + return identity; + } + } +} diff --git a/libraries/Microsoft.Bot.Connector/Authentication/AuthenticationConstants.cs b/libraries/Microsoft.Bot.Connector/Authentication/AuthenticationConstants.cs index 279bac6fbd..e01d571bd3 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/AuthenticationConstants.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/AuthenticationConstants.cs @@ -70,6 +70,11 @@ public static class AuthenticationConstants /// public const string ToBotFromEmulatorOpenIdMetadataUrl = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; + /// + /// TO BOT FROM AseChannel: OpenID metadata document for tokens coming from MSA. + /// + public const string ToBotFromAseChannelOpenIdMetadataUrl = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; + /// /// TO BOT FROM ENTERPRISE CHANNEL: OpenID metadata document for tokens coming from MSA. /// diff --git a/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs b/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs index 6bfb1989d8..8e775f871a 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/GovernmentAuthenticationConstants.cs @@ -56,5 +56,10 @@ public static class GovernmentAuthenticationConstants /// TO BOT FROM GOVERNMENT EMULATOR: OpenID metadata document for tokens coming from MSA. /// public const string ToBotFromEmulatorOpenIdMetadataUrl = "https://login.microsoftonline.us/cab8a31a-1906-4287-a0d8-4eef66b95f6e/v2.0/.well-known/openid-configuration"; + + /// + /// TO BOT FROM GOVERNMENT AseChannel: OpenID metadata document for tokens coming from MSA. + /// + public const string ToBotFromAseChannelOpenIdMetadataUrl = "https://login.microsoftonline.us/cab8a31a-1906-4287-a0d8-4eef66b95f6e/v2.0/.well-known/openid-configuration"; } } diff --git a/libraries/Microsoft.Bot.Connector/Authentication/JwtTokenValidation.cs b/libraries/Microsoft.Bot.Connector/Authentication/JwtTokenValidation.cs index 927410e29f..c9541f13d6 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/JwtTokenValidation.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/JwtTokenValidation.cs @@ -242,6 +242,11 @@ internal static bool IsValidTokenFormat(string authHeader) /// private static async Task AuthenticateTokenAsync(string authHeader, ICredentialProvider credentials, IChannelProvider channelProvider, string channelId, AuthenticationConfiguration authConfig, string serviceUrl, HttpClient httpClient) { + if (AseChannelValidation.IsAseChannel(channelId)) + { + return await AseChannelValidation.AuthenticateAseTokenAsync(authHeader, httpClient, authConfig).ConfigureAwait(false); + } + if (SkillValidation.IsSkillToken(authHeader)) { return await SkillValidation.AuthenticateChannelToken(authHeader, credentials, channelProvider, httpClient, channelId, authConfig).ConfigureAwait(false); diff --git a/libraries/Microsoft.Bot.Connector/Authentication/ParameterizedBotFrameworkAuthentication.cs b/libraries/Microsoft.Bot.Connector/Authentication/ParameterizedBotFrameworkAuthentication.cs index 0afccb78d5..bf9b016c08 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/ParameterizedBotFrameworkAuthentication.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/ParameterizedBotFrameworkAuthentication.cs @@ -174,6 +174,11 @@ private async Task JwtTokenValidation_ValidateClaimsAsync(IEnumerable cla private async Task JwtTokenValidation_AuthenticateTokenAsync(string authHeader, string channelId, string serviceUrl, CancellationToken cancellationToken) { + if (AseChannelValidation.IsAseChannel(channelId)) + { + return await AseChannelValidation.AuthenticateAseTokenAsync(authHeader).ConfigureAwait(false); + } + if (SkillValidation.IsSkillToken(authHeader)) { return await SkillValidation_AuthenticateChannelTokenAsync(authHeader, channelId, cancellationToken).ConfigureAwait(false); diff --git a/libraries/integration/Microsoft.Bot.Builder.Integration.AspNet.Core/ConfigurationBotFrameworkAuthentication.cs b/libraries/integration/Microsoft.Bot.Builder.Integration.AspNet.Core/ConfigurationBotFrameworkAuthentication.cs index 84e7e26ff5..92d8fc1802 100644 --- a/libraries/integration/Microsoft.Bot.Builder.Integration.AspNet.Core/ConfigurationBotFrameworkAuthentication.cs +++ b/libraries/integration/Microsoft.Bot.Builder.Integration.AspNet.Core/ConfigurationBotFrameworkAuthentication.cs @@ -30,6 +30,8 @@ public class ConfigurationBotFrameworkAuthentication : BotFrameworkAuthenticatio /// The ILogger instance to use. public ConfigurationBotFrameworkAuthentication(IConfiguration configuration, ServiceClientCredentialsFactory credentialsFactory = null, AuthenticationConfiguration authConfiguration = null, IHttpClientFactory httpClientFactory = null, ILogger logger = null) { + AseChannelValidation.Init(configuration); + var channelService = configuration.GetSection("ChannelService")?.Value; var validateAuthority = configuration.GetSection("ValidateAuthority")?.Value; var toChannelFromBotLoginUrl = configuration.GetSection("ToChannelFromBotLoginUrl")?.Value; diff --git a/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenExtractorTests.cs b/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenExtractorTests.cs index 0a56e908e4..6492c172c5 100644 --- a/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenExtractorTests.cs +++ b/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenExtractorTests.cs @@ -110,7 +110,7 @@ public async Task JwtTokenExtractor_WithExpiredToken_ShouldThrowUnauthorizedAcce } } - private static Task BuildExtractorAndValidateToken(X509Certificate2 cert, TokenValidationParameters validationParameters = null, DateTime? expires = null, DateTime? notBefore = null) + private static async Task BuildExtractorAndValidateToken(X509Certificate2 cert, TokenValidationParameters validationParameters = null, DateTime? expires = null, DateTime? notBefore = null) { // Custom validation parameters that allow us to test the extractor logic var tokenValidationParams = validationParameters ?? CreateTokenValidationParameters(cert); @@ -123,8 +123,7 @@ private static Task BuildExtractorAndValidateToken(X509Certifica AuthenticationConstants.AllowedSigningAlgorithms); var token = CreateTokenForCertificate(cert, expires, notBefore); - - return tokenExtractor.GetIdentityAsync($"Bearer {token}", "test"); + return await tokenExtractor.GetIdentityAsync($"Bearer {token}", "test"); } private static string CreateTokenForCertificate(X509Certificate2 cert, DateTime? expires = null, DateTime? notBefore = null) diff --git a/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenValidationTests.cs b/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenValidationTests.cs index d0003c31e4..afa3dc7dcd 100644 --- a/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenValidationTests.cs +++ b/tests/Microsoft.Bot.Connector.Tests/Authentication/JwtTokenValidationTests.cs @@ -3,11 +3,13 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Net.Http; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.Bot.Connector.Authentication; using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; using Moq; using Xunit; @@ -512,6 +514,59 @@ public async Task ValidateClaimsTest_DoesNotThrow_WhenNotSkillClaim_WithNullVali await JwtTokenValidation.ValidateClaimsAsync(new AuthenticationConfiguration(), claims); } + [Fact] + public void ValidationMetadataUrlTest_AseChannel_USGov() + { + var configMock = new Mock(); + var configSectionMockChannelService = new Mock(); + configSectionMockChannelService.Setup(o => o.Value).Returns(GovernmentAuthenticationConstants.ChannelService); + configMock.Setup(c => c.GetSection("ChannelService")).Returns(configSectionMockChannelService.Object); + AseChannelValidation.Init(configMock.Object); + + Assert.Equal(GovernmentAuthenticationConstants.ToBotFromEmulatorOpenIdMetadataUrl, typeof(AseChannelValidation).GetField("_metadataUrl", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).GetValue(default)); + } + + [Fact] + public void ValidationMetadataUrlTest_AseChannel_Public() + { + var configMock = new Mock(); + var configSectionMock = new Mock(); + configSectionMock.Setup(o => o.Value).Returns(string.Empty); + configMock.Setup(c => c.GetSection("ChannelService")).Returns(configSectionMock.Object); + AseChannelValidation.Init(configMock.Object); + + Assert.Equal(AuthenticationConstants.ToBotFromEmulatorOpenIdMetadataUrl, typeof(AseChannelValidation).GetField("_metadataUrl", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).GetValue(default)); + } + + [Fact] + public void ValidationIssueUrlTest_AseChannel() + { + var configMock = new Mock(); + var configSectionMock = new Mock(); + configSectionMock.Setup(o => o.Value).Returns("testTenantId"); + configMock.Setup(c => c.GetSection("MicrosoftAppTenantId")).Returns(configSectionMock.Object); + AseChannelValidation.Init(configMock.Object); + + var tenantIds = new string[] + { + "testTenantId", + "f8cdef31-a31e-4b4a-93e4-5f571e91255a", // US Gov MicrosoftServices.onmicrosoft.us + "d6d49420-f39b-4df7-a1dc-d59a935871db" // Public botframework.com + }; + foreach (var tenantId in tenantIds) + { + Assert.Contains($"https://sts.windows.net/{tenantId}/", AseChannelValidation.BetweenBotAndAseChannelTokenValidationParameters.ValidIssuers); + Assert.Contains($"https://login.microsoftonline.com/{tenantId}/v2.0", AseChannelValidation.BetweenBotAndAseChannelTokenValidationParameters.ValidIssuers); + Assert.Contains($"https://login.microsoftonline.us/{tenantId}/v2.0", AseChannelValidation.BetweenBotAndAseChannelTokenValidationParameters.ValidIssuers); + } + } + + [Fact] + public void ValidationChannelIdTest_AseChannel() + { + Assert.True(AseChannelValidation.IsAseChannel("AseChannel")); + } + private async Task JwtTokenValidation_ValidateAuthHeader_WithChannelService_Succeeds(string appId, string pwd, string channelService) { string header = $"Bearer {await new MicrosoftAppCredentials(appId, pwd).GetTokenAsync()}"; From b6aed8c659ea13bc151a18e41cad1f50537d123f Mon Sep 17 00:00:00 2001 From: fangyangci <133664123+fangyangci@users.noreply.github.com> Date: Thu, 21 Dec 2023 21:49:25 +0800 Subject: [PATCH 05/26] fix: AseChannelValidation need throw when appid is not valid. (#6721) * fixUSGovSingleTenant * Add UT * AseChannelValidation * Add UT * Rollback AuthTenant Property Name * The Ctor do contains the old ones, Add Ctor to ApiCompatBaseline * fix a coding mistake --- .../Authentication/AseChannelValidation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs b/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs index 923d7c0f0c..7cb54b5a27 100644 --- a/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs +++ b/libraries/Microsoft.Bot.Connector/Authentication/AseChannelValidation.cs @@ -190,7 +190,7 @@ public static async Task AuthenticateAseTokenAsync(string authHe if (!await _credentialProvider.IsValidAppIdAsync(appID).ConfigureAwait(false)) { - await Console.Out.WriteLineAsync(appID).ConfigureAwait(false); + throw new UnauthorizedAccessException($"AseChannelValidation Invalid AppId passed on token: {appID}"); } return identity; From c0917dd7332e5cd0b621e34f2024692bddfe548a Mon Sep 17 00:00:00 2001 From: fangyangci <133664123+fangyangci@users.noreply.github.com> Date: Mon, 8 Jan 2024 22:12:01 +0800 Subject: [PATCH 06/26] Fix a json serializer bug. (#6722) * fixUSGovSingleTenant * Add UT * AseChannelValidation * Add UT * Rollback AuthTenant Property Name * The Ctor do contains the old ones, Add Ctor to ApiCompatBaseline * fix a coding mistake * fix json Serializer bug * 1 * fix setting --- .../Session/StreamingSession.cs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/libraries/Microsoft.Bot.Connector.Streaming/Session/StreamingSession.cs b/libraries/Microsoft.Bot.Connector.Streaming/Session/StreamingSession.cs index c691b19183..d05289171d 100644 --- a/libraries/Microsoft.Bot.Connector.Streaming/Session/StreamingSession.cs +++ b/libraries/Microsoft.Bot.Connector.Streaming/Session/StreamingSession.cs @@ -9,7 +9,6 @@ using System.Linq; using System.Net; using System.Runtime.InteropServices; -using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Connector.Streaming.Payloads; @@ -19,6 +18,8 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Net.Http.Headers; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; namespace Microsoft.Bot.Connector.Streaming.Session { @@ -42,6 +43,13 @@ internal class StreamingSession private readonly object _receiveSync = new object(); + static StreamingSession() + { + var tmpSetting = SerializationSettings.DefaultSerializationSettings; + tmpSetting.NullValueHandling = NullValueHandling.Ignore; + Serializer = JsonSerializer.Create(tmpSetting); + } + public StreamingSession(RequestHandler receiver, TransportHandler sender, ILogger logger, CancellationToken connectionCancellationToken = default) { _receiver = receiver ?? throw new ArgumentNullException(nameof(receiver)); @@ -52,6 +60,8 @@ public StreamingSession(RequestHandler receiver, TransportHandler sender, ILogge _connectionCancellationToken = connectionCancellationToken; } + private static JsonSerializer Serializer { get; } + public async Task SendRequestAsync(StreamingRequest request, CancellationToken cancellationToken) { if (request == null) @@ -461,10 +471,16 @@ private static T DeserializeTo(ReadOnlySequence payload) mainPayload = payload.Slice(_utf8Bom.Length); } - var reader = new Utf8JsonReader(mainPayload); - return System.Text.Json.JsonSerializer.Deserialize( - ref reader, - new JsonSerializerOptions() { IgnoreNullValues = true, PropertyNameCaseInsensitive = true }); + using (var ms = new MemoryStream(mainPayload.ToArray())) + { + using (var sr = new StreamReader(ms)) + { + using (var jsonReader = new JsonTextReader(sr)) + { + return Serializer.Deserialize(jsonReader); + } + } + } } private static void CreatePlaceholderStreams(Header header, List placeholders, List streamInfo) From 1390ce0a72441924042288f6e53effcee1705baf Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Wed, 10 Jan 2024 18:52:58 -0600 Subject: [PATCH 07/26] Set up CI with Azure Pipelines [skip ci] --- OneBranch-botbuilder-dotnet-signed.yml | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 OneBranch-botbuilder-dotnet-signed.yml diff --git a/OneBranch-botbuilder-dotnet-signed.yml b/OneBranch-botbuilder-dotnet-signed.yml new file mode 100644 index 0000000000..203013b7d9 --- /dev/null +++ b/OneBranch-botbuilder-dotnet-signed.yml @@ -0,0 +1,34 @@ +# ASP.NET Core (.NET Framework) +# Build and test ASP.NET Core projects targeting the full .NET Framework. +# Add steps that publish symbols, save build artifacts, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core + +trigger: +- main + +pool: + vmImage: 'windows-latest' + +variables: + solution: '**/*.sln' + buildPlatform: 'Any CPU' + buildConfiguration: 'Release' + +steps: +- task: NuGetToolInstaller@1 + +- task: NuGetCommand@2 + inputs: + restoreSolution: '$(solution)' + +- task: VSBuild@1 + inputs: + solution: '$(solution)' + msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"' + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + +- task: VSTest@2 + inputs: + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' From 9efd1892a3f43bd7c12b8fa7242301ed11f66376 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Wed, 10 Jan 2024 18:55:47 -0600 Subject: [PATCH 08/26] OneBranch skeleton (#6726) Co-authored-by: Tracy Boehrer --- .../onebranch/botbuilder-dotnet-signed.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename OneBranch-botbuilder-dotnet-signed.yml => build/onebranch/botbuilder-dotnet-signed.yml (100%) diff --git a/OneBranch-botbuilder-dotnet-signed.yml b/build/onebranch/botbuilder-dotnet-signed.yml similarity index 100% rename from OneBranch-botbuilder-dotnet-signed.yml rename to build/onebranch/botbuilder-dotnet-signed.yml From 058be0985b4b1eee9695be0ecca2ae120369134f Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 11 Jan 2024 08:35:59 -0600 Subject: [PATCH 09/26] DotNet OB initial (#6727) Co-authored-by: Tracy Boehrer --- build/onebranch/botbuilder-dotnet-signed.yml | 34 ---- build/onebranch/ci-api-validation-steps.yml | 129 +++++++++++++ build/onebranch/ci-build-steps.yml | 44 +++++ .../ci-component-detection-steps.yml | 8 + build/onebranch/ci-post-to-github-steps.yml | 38 ++++ build/onebranch/ci-test-steps.yml | 106 ++++++++++ build/onebranch/ci.yml | 61 ++++++ build/onebranch/onebranch-dotnet-signed.yml | 64 +++++++ build/onebranch/pr.yml | 181 ++++++++++++++++++ .../sdk_dotnet_v4_org-feed-setup-steps.yml | 33 ++++ build/onebranch/sign-steps.yml | 10 + 11 files changed, 674 insertions(+), 34 deletions(-) delete mode 100644 build/onebranch/botbuilder-dotnet-signed.yml create mode 100644 build/onebranch/ci-api-validation-steps.yml create mode 100644 build/onebranch/ci-build-steps.yml create mode 100644 build/onebranch/ci-component-detection-steps.yml create mode 100644 build/onebranch/ci-post-to-github-steps.yml create mode 100644 build/onebranch/ci-test-steps.yml create mode 100644 build/onebranch/ci.yml create mode 100644 build/onebranch/onebranch-dotnet-signed.yml create mode 100644 build/onebranch/pr.yml create mode 100644 build/onebranch/sdk_dotnet_v4_org-feed-setup-steps.yml create mode 100644 build/onebranch/sign-steps.yml diff --git a/build/onebranch/botbuilder-dotnet-signed.yml b/build/onebranch/botbuilder-dotnet-signed.yml deleted file mode 100644 index 203013b7d9..0000000000 --- a/build/onebranch/botbuilder-dotnet-signed.yml +++ /dev/null @@ -1,34 +0,0 @@ -# ASP.NET Core (.NET Framework) -# Build and test ASP.NET Core projects targeting the full .NET Framework. -# Add steps that publish symbols, save build artifacts, and more: -# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core - -trigger: -- main - -pool: - vmImage: 'windows-latest' - -variables: - solution: '**/*.sln' - buildPlatform: 'Any CPU' - buildConfiguration: 'Release' - -steps: -- task: NuGetToolInstaller@1 - -- task: NuGetCommand@2 - inputs: - restoreSolution: '$(solution)' - -- task: VSBuild@1 - inputs: - solution: '$(solution)' - msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"' - platform: '$(buildPlatform)' - configuration: '$(buildConfiguration)' - -- task: VSTest@2 - inputs: - platform: '$(buildPlatform)' - configuration: '$(buildConfiguration)' diff --git a/build/onebranch/ci-api-validation-steps.yml b/build/onebranch/ci-api-validation-steps.yml new file mode 100644 index 0000000000..dfb8d1cbf1 --- /dev/null +++ b/build/onebranch/ci-api-validation-steps.yml @@ -0,0 +1,129 @@ +steps: +- task: DownloadPipelineArtifact@2 + displayName: 'Download BotBuilderDLLs from Artifacts' + inputs: + artifactName: 'BotBuilderDLLs-Debug-Windows-netcoreapp31' + targetPath: '$(System.ArtifactsDirectory)/OutputDlls' + +- task: DownloadPipelineArtifact@2 + displayName: 'Download ContractDlls from Artifacts' + inputs: + artifactName: 'ContractDlls' + targetPath: '$(System.ArtifactsDirectory)/ContractDlls' + +- powershell: | + Write-Host "The following API compatibility issues are suppressed:"; + Get-Content "ApiCompatBaseline.txt"; + displayName: 'Show API compat issue suppressions in ApiCompatBaseline.txt' + continueOnError: true + +- task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 + displayName: 'Compare Binaries' + inputs: + contractsRootFolder: '$(System.ArtifactsDirectory)/ContractDlls' + contractsFileName: '$(PackageName).dll' + implFolder: '$(System.ArtifactsDirectory)/OutputDlls' + failOnIssue: false + resolveFx: false + generateLog: true + outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults.txt' + outputFolder: '$(Build.ArtifactStagingDirectory)' + useBaseline: true + baselineFile: ApiCompatBaseline.txt + continueOnError: false + +- powershell: | + $filePath = "$(Build.ArtifactStagingDirectory)\$(PackageName).$(ApiContractVersion).CompatResults.txt" + $nugetLink = "compared against [version $(ApiContractVersion)](https://www.nuget.org/packages/$(PackageName)/$(ApiContractVersion))."; + Write-Host "Compatibility Check:"; + + if (-not (Test-Path $filePath)) { + $content = "The binary compatibility report for library '$(PackageName)' wasn't generated. This may have happened because the NuGet library '$(PackageName)' for version '$(ApiContractVersion)' was unavailable or a connectivity issue." + New-Item -Path '$(Build.ArtifactStagingDirectory)' -Name '$(PackageName).$(ApiContractVersion).CompatResults.txt' -ItemType "file" -Value $content + $content; + Write-Host "##vso[task.complete result=Failed;]"; + return; + } + + $baseline = Get-Content $filePath -Raw; + Write-Host "`n[Compare binaries task]"; + Write-Host "`nOriginal result:"; + $baseline; + + # When the Api Compat task has Binary compatibility issues, this process will filter out the Classes + # and then validates if still exists remaining issues. + if ($baseline.ToString().Trim().StartsWith(':x:')) { + Write-Host "`n[Class exclusion]"; + $excludeClasses = "$($env:ApiCompatExcludeClasses)".Trim().Split(',') | Where-Object { ($_.Trim().Length -gt 0) } | ForEach-Object { $_.Trim() }; + + if ($excludeClasses) { + Write-Host "`nList of classes to exclude:"; + $excludeClasses | ForEach-Object { " - " + $_ } + } + else { + Write-Host "`nThere are no classes to exclude."; + } + + $content = ($baseline -split '|<\/details\>'); + $header = $content[0].SubString($content[0].IndexOf('Binary') - 1).Trim(); + $issues = $content[1].Trim(); + $issues = ($issues -replace '```', '').Split([Environment]::NewLine); + + # Filter out issues based on Class name. + $issues = @( + $issues | Where-Object { + $line = $_; + if (-not $line.Trim()) { + return $false; + } + if ($excludeClasses) { + foreach ($class in $excludeClasses) { + $pattern = "'$class"; + if ($line -match $pattern) { + return $false; + } + } + } + return $true; + } | ForEach-Object { $_.Trim() } + ) + + # Creates new file content. + if ($issues) { + $newFile = @(); + $newfile += ":x: $($issues.Length) $header $nugetLink"; + $newFile += '
'; + $newFile += ""; + $newFile += '```'; + $newfile += $issues; + $newFile += '```'; + $newFile += ""; + $newFile += '
'; + + $newFile = $newFile -join [Environment]::NewLine; + Write-Host "##vso[task.complete result=Failed;]"; + } + else { + $newFile = ":heavy_check_mark: No Binary Compatibility issues for **$(PackageName)** $nugetLink"; + } + + $baseline = $newFile; + [system.io.file]::WriteAllText($filePath, $baseline); + Write-Host "`nProcessed result:"; + $baseline; + } + displayName: 'Compatibility Check' + continueOnError: false + condition: succeededOrFailed() + +- task: PublishBuildArtifacts@1 + displayName: 'Publish Compat Results artifact' + inputs: + ArtifactName: '$(PackageName).$(ApiContractVersion).CompatResults' + condition: succeededOrFailed() + +- script: | + dir .. /s + displayName: 'Dir workspace' + continueOnError: true + condition: succeededOrFailed() diff --git a/build/onebranch/ci-build-steps.yml b/build/onebranch/ci-build-steps.yml new file mode 100644 index 0000000000..ad4cf8eced --- /dev/null +++ b/build/onebranch/ci-build-steps.yml @@ -0,0 +1,44 @@ +steps: +- powershell: 'gci env:* | sort-object name | Format-Table -AutoSize -Wrap' + displayName: 'Display env vars' + +# Variables ReleasePackageVersion and PreviewPackageVersion are consumed by projects in Microsoft.Bot.Builder.sln. +# For the signed build, they should be settable at queue time. To set that up, define the variables in Azure on the Variables tab. +- task: NuGetToolInstaller@1 + displayName: 'Use NuGet ' + +- template: sdk_dotnet_v4_org-feed-setup-steps.yml + +- task: NuGetToolInstaller@1 + displayName: 'Use NuGet latest' + +- task: NuGetCommand@2 + inputs: + command: 'restore' + feedsToUse: 'config' + nugetConfigPath: 'nuget.config' + restoreSolution: '$(Parameters.solution)' + displayName: 'NuGet restore' + +- task: VSBuild@1 + displayName: 'Build solution Microsoft.Bot.Builder.sln' + inputs: + solution: '$(Parameters.solution)' + vsVersion: 17.0 + msbuildArgs: '$(MSBuildArguments)' + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + maximumCpuCount: true + logProjectEvents: false + +#- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 +# displayName: 'Component Detection' +# inputs: +# failOnAlert: true + +#- script: | +# cd .. +# dir *.* /s +# displayName: 'Dir workspace' +# continueOnError: true +# condition: succeededOrFailed() diff --git a/build/onebranch/ci-component-detection-steps.yml b/build/onebranch/ci-component-detection-steps.yml new file mode 100644 index 0000000000..258426b12d --- /dev/null +++ b/build/onebranch/ci-component-detection-steps.yml @@ -0,0 +1,8 @@ +steps: +- task: ComponentGovernanceComponentDetection@0 + displayName: Component Detection + inputs: + scanType: "Register" + verbosity: "Verbose" + alertWarningLevel: "High" + failOnAlert: true diff --git a/build/onebranch/ci-post-to-github-steps.yml b/build/onebranch/ci-post-to-github-steps.yml new file mode 100644 index 0000000000..e870edc924 --- /dev/null +++ b/build/onebranch/ci-post-to-github-steps.yml @@ -0,0 +1,38 @@ +steps: +- task: DownloadBuildArtifacts@0 + displayName: 'Download compat results artifact' + inputs: + downloadType: specific + itemPattern: '**\*.txt' + downloadPath: '$(System.ArtifactsDirectory)\ApiCompat' + +- task: CopyFiles@2 + displayName: 'Copy results for publish to Artifacts' + inputs: + SourceFolder: '$(System.ArtifactsDirectory)\ApiCompat' + Contents: '**\*.txt' + TargetFolder: '$(System.ArtifactsDirectory)\ApiCompatibilityResults' + flattenFolders: true + +- task: PublishPipelineArtifact@1 + inputs: + artifactName: 'ApiCompatibilityResults' + targetPath: '$(System.ArtifactsDirectory)\ApiCompatibilityResults' + displayName: 'Publish compat results to Artifacts' + continueOnError: true + +- task: SOUTHWORKS.github-pr-comment.custom-publish-comment-task.github-pr-comment@0 + displayName: 'Publish compat results to GitHub' + inputs: + userToken: '$(GitHubCommentApiKey)' + bodyFilePath: '$(System.ArtifactsDirectory)\ApiCompat' + getSubFolders: true + keepCommentHistory: false + # Skip for forks, as secret tokens are not available to them. + condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.PullRequest.IsFork'], 'True')) + +- script: | + dir .. /s + displayName: 'Dir workspace' + continueOnError: true + condition: succeededOrFailed() diff --git a/build/onebranch/ci-test-steps.yml b/build/onebranch/ci-test-steps.yml new file mode 100644 index 0000000000..061a1168a9 --- /dev/null +++ b/build/onebranch/ci-test-steps.yml @@ -0,0 +1,106 @@ +#variables: +# DotNetCoverallsToken: define this in Azure +# PublishCoverage: (optional) set to true in the calling template. +steps: +- powershell: | + Remove-Item CodeCoverage -Force -Recurse -ErrorAction Ignore + New-Item CodeCoverage -ItemType Directory -Force + displayName: 'Create Code Coverage directory' + +- task: NodeTool@0 + displayName: 'install Node.js v14.x' + inputs: + versionSpec: '14.x' + +- task: Npm@1 + displayName: 'install botframework-cli to set up for Schema merge tests' + inputs: + command: custom + verbose: false + customCommand: 'install -g @microsoft/botframework-cli@next' + +- task: UseDotNet@2 + displayName: "Install .NET Core 3.1.415" + continueOnError: true + inputs: + packageType: "sdk" + version: 3.1.415 + condition: and(succeeded(), eq(variables['BuildConfiguration'],'Release-Windows'), eq(variables['BuildTarget'],'netcoreapp31')) + +- task: DotNetCoreCLI@2 + displayName: 'dotnet test (release) 3.1' + inputs: + command: test + projects: | + Tests/**/*Tests.csproj + + arguments: '-v n -f netcoreapp3.1 --configuration release --no-build --no-restore --filter "TestCategory!=IgnoreInAutomatedBuild&TestCategory!=FunctionalTests" --collect:"Code Coverage" --settings $(Build.SourcesDirectory)\CodeCoverage.runsettings' + condition: and(succeeded(), eq(variables['BuildConfiguration'],'Release-Windows'), eq(variables['BuildTarget'],'netcoreapp31')) + +- task: DotNetCoreCLI@2 + displayName: 'dotnet test (release) 6.0' + inputs: + command: test + projects: | + Tests/**/*Tests.csproj + + arguments: '-v n -f net6.0 --configuration release --no-build --no-restore --filter "TestCategory!=IgnoreInAutomatedBuild&TestCategory!=FunctionalTests" --collect:"Code Coverage" --settings $(Build.SourcesDirectory)\CodeCoverage.runsettings' + condition: and(succeeded(), eq(variables['BuildConfiguration'],'Release-Windows'), eq(variables['BuildTarget'],'net6')) + +- powershell: | + # This task copies the code coverage file created by dotnet test into a well known location. In all + # checks I've done, dotnet test ALWAYS outputs the coverage file to the temp directory. + # My attempts to override this and have it go directly to the CodeCoverage directory have + # all failed, so I'm just doing the copy here. (cmullins) + + Get-ChildItem -Path "D:\a\_temp" -Include "*.coverage" -Recurse | Copy-Item -Destination CodeCoverage + displayName: 'Copy .coverage Files to CodeCoverage folder' + condition: and(succeeded(), eq(variables['PublishCoverage'], 'true')) + +- powershell: 'echo ''##vso[task.setvariable variable=CoverallsToken]$(DotNetCoverallsToken)''' + displayName: 'Set CoverallsToken for PublishToCoveralls.ps1 if token exists' + continueOnError: true + condition: and(succeeded(), eq(variables['PublishCoverage'], 'true')) + +- powershell: | + dotnet nuget remove source SDK_Dotnet_V4_org + displayName: Remove SDK_Dotnet_V4_org feed source reference from nuget.config + continueOnError: true + condition: and(succeeded(), eq(variables['PublishCoverage'], 'true'), ne(variables['System.PullRequest.IsFork'], 'True')) + +- task: PowerShell@2 + displayName: 'Upload Coverage Files to Coveralls.io https://coveralls.io/github/microsoft/botbuilder-dotnet' + inputs: + targetType: filePath + filePath: '$(Build.SourcesDirectory)\build\PublishToCoveralls.ps1' + arguments: '-pathToCoverageFiles "$(Build.SourcesDirectory)\CodeCoverage" -serviceName "CI-PR build"' + continueOnError: true + # Skip for forks because it errors: "Couldn't find a repository matching this job." + condition: and(succeeded(), eq(variables['PublishCoverage'], 'true'), ne(variables['System.PullRequest.IsFork'], 'True')) + +- powershell: | + New-Item -ItemType directory -Path "outputLibraries\" -Force + + $buildTarget = $env:BuildConfiguration.Split("-")[0]; + + $env:PackagesToValidate.Split(",") | ForEach { + $library = $_.Trim() + Write-Host $library + + Get-ChildItem -Path "*/$library/bin/$buildTarget/netstandard2.0/$library.dll" -Recurse | Copy-Item -Destination 'outputLibraries\' -Force + Get-ChildItem -Path "*/*/$library/bin/$buildTarget/netstandard2.0/$library.dll" -Recurse | Copy-Item -Destination 'outputLibraries\' -Force + } + displayName: 'Copy DLLs to outputLibraries folder' + +- task: PublishPipelineArtifact@0 + displayName: 'Publish Microsoft.Bot.Builder DLLs artifact' + inputs: + artifactName: 'BotBuilderDLLs-$(BuildConfiguration)-$(BuildTarget)' + targetPath: outputLibraries + continueOnError: true + +- script: | + dir .. /s + displayName: 'Dir workspace' + continueOnError: true + condition: succeededOrFailed() diff --git a/build/onebranch/ci.yml b/build/onebranch/ci.yml new file mode 100644 index 0000000000..0b8bba30c3 --- /dev/null +++ b/build/onebranch/ci.yml @@ -0,0 +1,61 @@ +# +# Replaces the classic BotBuilder-DotNet-master-Signed-daily. +# + +# "name" here defines the build number format. Build number is accessed via $(Build.BuildNumber) +#name: $(Date:yyyyMMdd).$(Build.BuildId) + +#pool: +# vmImage: $[ coalesce( variables['VMImage'], 'windows-2022' ) ] # or 'windows-latest' +# demands: +# - msbuild +# - visualstudio + +#trigger: none # ci trigger is set in ADO +#pr: none # pr trigger is set in ADO + +variables: + BuildConfiguration: Release-Windows + TestConfiguration: Release + BuildPlatform: any cpu + MSBuildArguments: -p:PublishRepositoryUrl=true -p:GeneratePackages=true -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg + Packaging.EnableSBOMSigning: true + Parameters.solution: Microsoft.Bot.Builder.sln +# PreviewPackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. +# ReleasePackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. +# SDK_Dotnet_V4_org_Url: define this in Azure + +jobs: +- job: Build_and_Sign + steps: + - powershell: | + # Replace {DateStamp} and {CommitHash} tokens with the actual values in vars ReleasePackageVersion and PreviewPackageVersion + $dateStamp = (Get-Date -format "yyyyMMdd"); + $commitHash = "$(Build.SourceVersion)".SubString(0,7); + + "Raw ReleasePackageVersion = $(ReleasePackageVersion)"; + $v = "$(ReleasePackageVersion)".Replace("{DateStamp}",$dateStamp).Replace("{CommitHash}",$commitHash); + Write-Host "##vso[task.setvariable variable=ReleasePackageVersion;]$v"; + "Resolved ReleasePackageVersion = $v"; + + "Raw PreviewPackageVersion = $(PreviewPackageVersion)"; + $ppv = "$(PreviewPackageVersion)".Replace("{DateStamp}",$dateStamp).Replace("{CommitHash}",$commitHash); + Write-Host "##vso[task.setvariable variable=PreviewPackageVersion;]$ppv"; + "Resolved PreviewPackageVersion = $ppv"; + displayName: 'Resolve package version variables' + + - task: colinsalmcorner.colinsalmcorner-buildtasks.tag-build-task.tagBuildOrRelease@0 + displayName: 'Tag build with release and preview versions' + inputs: + tags: | + Release: $(ReleasePackageVersion) + Preview: $(PreviewPackageVersion) + continueOnError: true + + - template: ci-build-steps.yml + - template: sign-steps.yml + + #- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 + # displayName: 'Component Detection' + # inputs: + # failOnAlert: false diff --git a/build/onebranch/onebranch-dotnet-signed.yml b/build/onebranch/onebranch-dotnet-signed.yml new file mode 100644 index 0000000000..fd06666693 --- /dev/null +++ b/build/onebranch/onebranch-dotnet-signed.yml @@ -0,0 +1,64 @@ +################################################################################# +# OneBranch Pipelines # +# This pipeline was created by EasyStart from a sample located at: # +# https://aka.ms/obpipelines/easystart/samples # +# Documentation: https://aka.ms/obpipelines # +# Yaml Schema: https://aka.ms/obpipelines/yaml/schema # +# Retail Tasks: https://aka.ms/obpipelines/tasks # +# Support: https://aka.ms/onebranchsup # +################################################################################# +# https://aka.ms/obpipelines/triggers +trigger: none # ci trigger is set in ADO + +variables: + Codeql.TSAEnabled: true # Needed for Security Development Lifecycle (SDL) requirements http://aka.ms/codeql + WindowsContainerImage: onebranch.azurecr.io/windows/ltsc2019/vse2022:latest # for Windows jobs + LinuxContainerImage: cdpxlinux.azurecr.io/user/lsg-linux/lsg-yocto-project:latest # for Linux jobs + IsOfficialBuild: True + +name: $(Date:yyyyMMdd).$(Build.BuildId) + +resources: + repositories: + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main + +extends: + template: v2/OneBranch.Official.CrossPlat.yml@templates + parameters: + globalSdl: # https://aka.ms/obpipelines/sdl + tsa: + enabled: true # SDL results of official builds ar uploaded to TSA by default. + codeql: + tsaEnabled: true + compiled: + enabled: true + policheck: + break: false # always break the build on policheck issues. You can disable it by setting to 'false' + suppression: + suppressionFile: $(Build.SourcesDirectory)\.gdn\global.gdnsuppress + suppressionSet: default + git: + persistCredentials: true + stages: + - stage: build + jobs: + - job: main + pool: + type: windows # read more about custom job pool types at https://aka.ms/obpipelines/yaml/jobs + variables: + ob_outputDirectory: '$(Build.SourcesDirectory)\out' + ob_symbolsPublishing_enabled: true # Default is false + ob_symbolsPublishing_symbolsFolder: '$(Build.SourcesDirectory)/libraries' # Default is ob_outputDirectory + ob_symbolsPublishing_searchPattern: '**/bin/Debug/netstandard2.0/*.pdb' # Default is **/*.pdb + ob_symbolsPublishing_indexSources: true # Default is true + ob_sdl_tsa_configFile: '$(Build.SourcesDirectory)\.config\tsaoptions.json' + ob_sdl_binskim_scanOutputDirectoryOnly: true + LGTM_INDEX_FILTERS: 'exclude: **/dotnet*.js,**/underscore*.js,**/doctools.js' # excluding javascript files that come from .net blazor framework and vcpkg(for installing Brotli) as we consider these framework and dependency safe + # ob_sdl_suppression_suppressionFile: $(Build.SourcesDirectory)\.gdn\job.gdnsuppress + # ob_sdl_suppression_suppressionSet: default + steps: + - template: build/onebranch/ci.yml@self + \ No newline at end of file diff --git a/build/onebranch/pr.yml b/build/onebranch/pr.yml new file mode 100644 index 0000000000..4c01e03e65 --- /dev/null +++ b/build/onebranch/pr.yml @@ -0,0 +1,181 @@ +# +# Replaces the classic BotBuilder-DotNet-master-CI-PR +# + +# "name" here defines the build number format. Build number is accessed via $(Build.BuildNumber) +name: $(Build.BuildId) + +pool: + vmImage: $[ coalesce( variables['VMImage'], 'windows-latest' ) ] # or 'windows-latest' + demands: + - msbuild + - visualstudio + +trigger: none # ci trigger is set in ADO +pr: none # pr trigger is set in ADO + +variables: + ApiContractVersion: 4.6.3 + PackagesToValidate: Microsoft.Bot.Builder.AI.Luis,Microsoft.Bot.Builder.AI.QnA,Microsoft.Bot.Builder.ApplicationInsights,Microsoft.Bot.Builder.Azure,Microsoft.Bot.Builder.Dialogs,Microsoft.Bot.Builder.Integration.ApplicationInsights.Core,Microsoft.Bot.Builder.Integration.AspNet.Core,Microsoft.Bot.Builder.TemplateManager,Microsoft.Bot.Builder.Testing,Microsoft.Bot.Builder,Microsoft.Bot.Configuration,Microsoft.Bot.Connector,Microsoft.Bot.Schema,Microsoft.Bot.Streaming + BuildConfiguration: Debug-Windows + BuildPlatform: any cpu + IsBuildServer: true # This is consumed by tests\Microsoft.Bot.Builder.Dialogs.Declarative.Tests\SchemaTestsFixture.cs. + MSBuildArguments: -p:SignAssembly=false -p:delaySign=false + Parameters.solution: Microsoft.Bot.Builder.sln + PreviewPackageVersion: 4.9.0-preview-$(Build.BuildNumber) # This is consumed by projects in Microsoft.Bot.Builder.sln. + ReleasePackageVersion: 4.9.0-preview-$(Build.BuildNumber) # This is consumed by projects in Microsoft.Bot.Builder.sln. + runCodesignValidationInjection: false # Disables unnecessary CodeSign Validation step + system_accesstoken: $(System.AccessToken) + LGTM.UploadSnapshot: true + Semmle.SkipAnalysis: true +# ApiCompatExcludeClasses: (optional) define this in Azure + DisableApiCompatibityValidation: true +# DotNetCoverallsToken: define this in Azure +# GitHubCommentApiKey: define this in Azure +# SDK_Dotnet_V4_org_Url: define this in Azure + +# The following 2 stages run multi-configuration, multi-agent parallel jobs. +# Debug-Windows/Release-Windows => Builds everything in Debug/Release + the ASP.NET Desktop. +# Debug/Release => would build all .NET Standard libs and test them. +# The .NET 4.X asp.net integrations libraries do not build and test on non-windows boxes. +# If we drop support for .NET 4.x then we can drop to just Debug/Release. +stages: +- stage: Build + jobs: + - job: Debug_Windows_Configuration_31 + variables: + BuildConfiguration: Debug-Windows + BuildTarget: 'netcoreapp31' # set the TargetFramework property for tests to use netcoreapp3.1 + steps: + - template: ci-build-steps.yml + - template: ci-test-steps.yml + - template: ci-component-detection-steps.yml + - job: Debug_Windows_Configuration_6 + variables: + BuildConfiguration: Debug-Windows + BuildTarget: 'net6' # set the TargetFramework property for tests to use net6.0 + steps: + - template: ci-build-steps.yml + - template: ci-test-steps.yml + - template: ci-component-detection-steps.yml + - job: Release_Windows_Configuration_31 + variables: + BuildConfiguration: Release-Windows + BuildTarget: 'netcoreapp31' # set the TargetFramework property for tests to use netcoreapp3.1 + steps: + - template: ci-build-steps.yml + - template: ci-test-steps.yml + - template: ci-component-detection-steps.yml + - job: Release_Windows_Configuration_6 + variables: + BuildConfiguration: Release-Windows + BuildTarget: 'net6' # set the TargetFramework property for tests to use net6.0 + PublishCoverage: true + steps: + - template: ci-build-steps.yml + - template: ci-test-steps.yml + - template: ci-component-detection-steps.yml + +- stage: API_Compatibility_Validation + dependsOn: Build + condition: and(succeeded(), ne(variables['DisableApiCompatibityValidation'], 'true')) + variables: + skipComponentGovernanceDetection: true # the task is already injected into the build jobs, so unnecessary here. + jobs: + - job: generate_multiconfig_var + steps: + # Download contract .dlls from nuget.org. + - powershell: | + $PackageNames = "$(PackagesToValidate)"; + $ApiContractVersion = "$(ApiContractVersion)"; + $TempContractInstallDirectory = ".\TempContractInstallDir"; + $OutputDirectory = ".\ContractDlls"; + + Write-Host "`nDownloading packages version $ApiContractVersion."; + + New-Item -ItemType directory -Path $OutputDirectory -Force | Out-Null; + + $Names = $PackageNames.Split(','); + + foreach ($Name in $Names) { + "---- $Name ------------------"; + nuget install $Name -Version $ApiContractVersion -OutputDirectory $TempContractInstallDirectory -DirectDownload -NonInteractive; + + if ($LASTEXITCODE -eq 0) { + Copy-Item "$TempContractInstallDirectory\$Name.$ApiContractVersion\lib\netstandard2.0\$Name.dll" $OutputDirectory; + } + else { + Write-Host "##vso[task.complete result=Failed;]"; + } + } + displayName: 'Download Contract DLLs to ContractDlls folder' + continueOnError: true + + - task: PublishPipelineArtifact@0 + inputs: + artifactName: 'ContractDlls' + targetPath: ContractDlls + displayName: 'Push to ContractDlls in Artifacts' + continueOnError: true + + - powershell: | + $multiconfig = '{'; + if ("$(Build.Reason)" -in ('Schedule', 'Manual')) { + $env:PackagesToValidate.Split(",") | ForEach { + $library = $_.Trim() + $threadName = $library -replace "Microsoft.", ""; + $multiconfig += "'" + $threadName + "':{'PackageName':'" + $library + "'}, "; + } + } + else { + $updatedFiles = $(git diff HEAD HEAD~ --name-only) + + $updatedFiles | ForEach-Object { + $changedLibrary = '' + Switch -Wildcard ($_) { + '*/Microsoft.Bot.Builder.AI.Luis/*' { $changedLibrary = 'Microsoft.Bot.Builder.AI.Luis' } + '*/Microsoft.Bot.Builder.AI.QnA/*' { $changedLibrary = 'Microsoft.Bot.Builder.AI.QnA' } + '*/Microsoft.Bot.Builder.ApplicationInsights/*' { $changedLibrary = 'Microsoft.Bot.Builder.ApplicationInsights' } + '*/Microsoft.Bot.Builder.Azure/*' { $changedLibrary = 'Microsoft.Bot.Builder.Azure' } + '*/Microsoft.Bot.Builder.Dialogs/*' { $changedLibrary = 'Microsoft.Bot.Builder.Dialogs' } + '*/Microsoft.Bot.Builder.Integration.ApplicationInsights.Core/*' { $changedLibrary = 'Microsoft.Bot.Builder.Integration.ApplicationInsights.Core' } + '*/Microsoft.Bot.Builder.Integration.AspNet.Core/*' { $changedLibrary = 'Microsoft.Bot.Builder.Integration.AspNet.Core' } + '*/Microsoft.Bot.Builder.TemplateManager/*' { $changedLibrary = 'Microsoft.Bot.Builder.TemplateManager' } + '*/Microsoft.Bot.Builder.Testing/*' { $changedLibrary = 'Microsoft.Bot.Builder.Testing' } + '*/Microsoft.Bot.Builder/*' { $changedLibrary = 'Microsoft.Bot.Builder' } + '*/Microsoft.Bot.Configuration/*' { $changedLibrary = 'Microsoft.Bot.Configuration' } + '*/Microsoft.Bot.Connector/*' { $changedLibrary = 'Microsoft.Bot.Connector' } + '*/Microsoft.Bot.Schema/*' { $changedLibrary = 'Microsoft.Bot.Schema' } + '*/Microsoft.Bot.Streaming/*' { $changedLibrary = 'Microsoft.Bot.Streaming' } + } + if ($changedLibrary.Length -gt 0) { + Write-Host $changedLibrary + $threadName = $changedLibrary.Split(".")[-1]; + $multiconfig += "'" + $threadName + "':{'PackageName':'" + $changedLibrary + "'}, "; + } + } + } + $multiconfig = $multiconfig.TrimEnd(' ').TrimEnd(',') + "}"; + echo 'Matrix variable:' + echo $multiconfig + "##vso[task.setVariable variable=MULTICONFIG;isOutput=true]$multiconfig" + name: generate_var + displayName: Generate matrix variable + + - job: check_api_for + dependsOn: generate_multiconfig_var + condition: ne(dependencies.generate_multiconfig_var.outputs['generate_var.MULTICONFIG'], '{}') + timeoutInMinutes: 10 + strategy: + maxParallel: 10 + matrix: $[ dependencies.generate_multiconfig_var.outputs['generate_var.MULTICONFIG'] ] + steps: + - template: ci-api-validation-steps.yml + + - job: post_results_to_gitHub + dependsOn: check_api_for + condition: ne(dependencies.generate_multiconfig_var.outputs['generate_var.MULTICONFIG'], '{}') + variables: + BuildConfiguration: Release-Windows + steps: + - template: ci-post-to-github-steps.yml diff --git a/build/onebranch/sdk_dotnet_v4_org-feed-setup-steps.yml b/build/onebranch/sdk_dotnet_v4_org-feed-setup-steps.yml new file mode 100644 index 0000000000..bb620e3d62 --- /dev/null +++ b/build/onebranch/sdk_dotnet_v4_org-feed-setup-steps.yml @@ -0,0 +1,33 @@ +# Create nuget.config for resolving dependencies exclusively from SDK_Dotnet_V4_org feed. +# Resolve from nuget.org when PR is from a fork, as forks do not have access to our private feed. +steps: +- powershell: | + if ("$(System.PullRequest.IsFork)" -eq 'True') { + $key = "nuget.org"; + $value = "https://api.nuget.org/v3/index.json"; + Write-Host 'System.PullRequest.IsFork = True'; + } + else { + $key = "SDK_Dotnet_V4_org"; + $value = "$(SDK_Dotnet_V4_org_Url)"; + } + + $file = "$(Build.SourcesDirectory)\nuget.config"; + + $content = @" + + + + + + + + + + + + "@; + + New-Item -Path $file -ItemType "file" -Value $content -Force; + '-------------'; get-content "$file"; '==================='; + displayName: Create nuget.config for SDK_Dotnet_V4_org feed \ No newline at end of file diff --git a/build/onebranch/sign-steps.yml b/build/onebranch/sign-steps.yml new file mode 100644 index 0000000000..18aa75a5ec --- /dev/null +++ b/build/onebranch/sign-steps.yml @@ -0,0 +1,10 @@ +steps: +- task: onebranch.pipeline.signing@1 + displayName: "Sign output" + inputs: + command: "sign" + signing_profile: "external_distribution" + signing_environment: "azure-ado" + files_to_sign: "**/*.exe;**/*.dll;**/*.ps1;**/*.psm1" + search_root: "libraries" + From 91f54d67fd209caf8477931d8844b402465e06de Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 11 Jan 2024 10:42:21 -0600 Subject: [PATCH 10/26] Set up CI with Azure Pipelines Test [skip ci] --- azure-pipelines.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 0000000000..f53e97b6b6 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,19 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +trigger: +- main + +pool: + vmImage: ubuntu-latest + +steps: +- script: echo Hello, world! + displayName: 'Run a one-line script' + +- script: | + echo Add other tasks to build, test, and deploy your project. + echo See https://aka.ms/yaml + displayName: 'Run a multi-line script' From 206b6f6dba342b109c793440c0759a2307a3ff51 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 11 Jan 2024 10:47:29 -0600 Subject: [PATCH 11/26] OneBranch fixes (#6728) * OB Fixes * Removed test pipeline --------- Co-authored-by: Tracy Boehrer --- azure-pipelines.yml | 19 ----- build/onebranch/ci.yml | 80 ++++++++------------- build/onebranch/onebranch-dotnet-signed.yml | 9 +++ 3 files changed, 40 insertions(+), 68 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index f53e97b6b6..0000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Starter pipeline -# Start with a minimal pipeline that you can customize to build and deploy your code. -# Add steps that build, run tests, deploy, and more: -# https://aka.ms/yaml - -trigger: -- main - -pool: - vmImage: ubuntu-latest - -steps: -- script: echo Hello, world! - displayName: 'Run a one-line script' - -- script: | - echo Add other tasks to build, test, and deploy your project. - echo See https://aka.ms/yaml - displayName: 'Run a multi-line script' diff --git a/build/onebranch/ci.yml b/build/onebranch/ci.yml index 0b8bba30c3..1e19de1c40 100644 --- a/build/onebranch/ci.yml +++ b/build/onebranch/ci.yml @@ -1,61 +1,43 @@ -# -# Replaces the classic BotBuilder-DotNet-master-Signed-daily. -# - -# "name" here defines the build number format. Build number is accessed via $(Build.BuildNumber) -#name: $(Date:yyyyMMdd).$(Build.BuildId) - -#pool: -# vmImage: $[ coalesce( variables['VMImage'], 'windows-2022' ) ] # or 'windows-latest' -# demands: -# - msbuild -# - visualstudio - -#trigger: none # ci trigger is set in ADO -#pr: none # pr trigger is set in ADO - -variables: - BuildConfiguration: Release-Windows - TestConfiguration: Release - BuildPlatform: any cpu - MSBuildArguments: -p:PublishRepositoryUrl=true -p:GeneratePackages=true -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg - Packaging.EnableSBOMSigning: true - Parameters.solution: Microsoft.Bot.Builder.sln -# PreviewPackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. -# ReleasePackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. -# SDK_Dotnet_V4_org_Url: define this in Azure - -jobs: -- job: Build_and_Sign - steps: +#variables: +# BuildConfiguration: Release-Windows +# TestConfiguration: Release +# BuildPlatform: any cpu +# MSBuildArguments: -p:PublishRepositoryUrl=true -p:GeneratePackages=true -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg +# Packaging.EnableSBOMSigning: true +# Parameters.solution: Microsoft.Bot.Builder.sln +## PreviewPackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. +## ReleasePackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. +## SDK_Dotnet_V4_org_Url: define this in Azure + +steps: - powershell: | - # Replace {DateStamp} and {CommitHash} tokens with the actual values in vars ReleasePackageVersion and PreviewPackageVersion - $dateStamp = (Get-Date -format "yyyyMMdd"); - $commitHash = "$(Build.SourceVersion)".SubString(0,7); - - "Raw ReleasePackageVersion = $(ReleasePackageVersion)"; - $v = "$(ReleasePackageVersion)".Replace("{DateStamp}",$dateStamp).Replace("{CommitHash}",$commitHash); - Write-Host "##vso[task.setvariable variable=ReleasePackageVersion;]$v"; - "Resolved ReleasePackageVersion = $v"; - - "Raw PreviewPackageVersion = $(PreviewPackageVersion)"; - $ppv = "$(PreviewPackageVersion)".Replace("{DateStamp}",$dateStamp).Replace("{CommitHash}",$commitHash); - Write-Host "##vso[task.setvariable variable=PreviewPackageVersion;]$ppv"; - "Resolved PreviewPackageVersion = $ppv"; + # Replace {DateStamp} and {CommitHash} tokens with the actual values in vars ReleasePackageVersion and PreviewPackageVersion + $dateStamp = (Get-Date -format "yyyyMMdd"); + $commitHash = "$(Build.SourceVersion)".SubString(0,7); + + "Raw ReleasePackageVersion = $(ReleasePackageVersion)"; + $v = "$(ReleasePackageVersion)".Replace("{DateStamp}",$dateStamp).Replace("{CommitHash}",$commitHash); + Write-Host "##vso[task.setvariable variable=ReleasePackageVersion;]$v"; + "Resolved ReleasePackageVersion = $v"; + + "Raw PreviewPackageVersion = $(PreviewPackageVersion)"; + $ppv = "$(PreviewPackageVersion)".Replace("{DateStamp}",$dateStamp).Replace("{CommitHash}",$commitHash); + Write-Host "##vso[task.setvariable variable=PreviewPackageVersion;]$ppv"; + "Resolved PreviewPackageVersion = $ppv"; displayName: 'Resolve package version variables' - task: colinsalmcorner.colinsalmcorner-buildtasks.tag-build-task.tagBuildOrRelease@0 displayName: 'Tag build with release and preview versions' inputs: tags: | - Release: $(ReleasePackageVersion) - Preview: $(PreviewPackageVersion) + Release: $(ReleasePackageVersion) + Preview: $(PreviewPackageVersion) continueOnError: true - template: ci-build-steps.yml - template: sign-steps.yml - #- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - # displayName: 'Component Detection' - # inputs: - # failOnAlert: false +# - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 +# displayName: 'Component Detection' +# inputs: +# failOnAlert: false diff --git a/build/onebranch/onebranch-dotnet-signed.yml b/build/onebranch/onebranch-dotnet-signed.yml index fd06666693..d255ccec1f 100644 --- a/build/onebranch/onebranch-dotnet-signed.yml +++ b/build/onebranch/onebranch-dotnet-signed.yml @@ -15,6 +15,15 @@ variables: WindowsContainerImage: onebranch.azurecr.io/windows/ltsc2019/vse2022:latest # for Windows jobs LinuxContainerImage: cdpxlinux.azurecr.io/user/lsg-linux/lsg-yocto-project:latest # for Linux jobs IsOfficialBuild: True + BuildConfiguration: Release-Windows + TestConfiguration: Release + BuildPlatform: any cpu + MSBuildArguments: -p:PublishRepositoryUrl=true -p:GeneratePackages=true -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg + Packaging.EnableSBOMSigning: true + Parameters.solution: Microsoft.Bot.Builder.sln +# PreviewPackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. +# ReleasePackageVersion: 4.8.0-preview-$(Build.BuildNumber) # Consumed by projects in Microsoft.Bot.Builder.sln. Define this in Azure to be settable at queue time. +# SDK_Dotnet_V4_org_Url: define this in Azure name: $(Date:yyyyMMdd).$(Build.BuildId) From cc342429042ad41430e5b440a009e8d523014b52 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Fri, 19 Jan 2024 12:32:52 -0600 Subject: [PATCH 12/26] System.IdentityModel.Tokens.Jwt bump (#6731) * System.IdentityModel.Tokens.Jwt bump * Microsoft.IdentityModel.Tokens bump --------- Co-authored-by: Tracy Boehrer --- .../Microsoft.Bot.Connector.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Microsoft.Bot.Connector.Tests/Microsoft.Bot.Connector.Tests.csproj b/tests/Microsoft.Bot.Connector.Tests/Microsoft.Bot.Connector.Tests.csproj index c076ed7830..445d81abcc 100644 --- a/tests/Microsoft.Bot.Connector.Tests/Microsoft.Bot.Connector.Tests.csproj +++ b/tests/Microsoft.Bot.Connector.Tests/Microsoft.Bot.Connector.Tests.csproj @@ -13,12 +13,12 @@ - + - + all From 2e8a6f87883ec1f9515811bc6473756260fb1790 Mon Sep 17 00:00:00 2001 From: Alex Terentiev Date: Fri, 19 Jan 2024 14:16:39 -0500 Subject: [PATCH 13/26] Add isVisible property to AceData (#6730) Co-authored-by: aterentiev --- libraries/Microsoft.Bot.Schema/SharePoint/AceData.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libraries/Microsoft.Bot.Schema/SharePoint/AceData.cs b/libraries/Microsoft.Bot.Schema/SharePoint/AceData.cs index b5640c8951..da590145cf 100644 --- a/libraries/Microsoft.Bot.Schema/SharePoint/AceData.cs +++ b/libraries/Microsoft.Bot.Schema/SharePoint/AceData.cs @@ -84,6 +84,13 @@ public enum AceCardSize [JsonProperty(PropertyName = "iconProperty")] public string IconProperty { get; set; } + /// + /// Gets or sets the visibility of the Adaptive Card Extension. + /// + /// The value is the flag that indicates if the Adaptive Card Extension is visible. Default to true. + [JsonProperty(PropertyName = "isVisible")] + public bool? IsVisible { get; set; } + /// /// Gets or Sets the property bag of type . /// From 8d4b2aa3f4ce8aee6628be8617e4065c34045c9b Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Wed, 31 Jan 2024 11:39:26 -0600 Subject: [PATCH 14/26] Added release.proj for pipelines (#6736) Co-authored-by: Tracy Boehrer --- release.proj | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 release.proj diff --git a/release.proj b/release.proj new file mode 100644 index 0000000000..4040b2f203 --- /dev/null +++ b/release.proj @@ -0,0 +1,10 @@ + + + + + true + + + + + \ No newline at end of file From 784b4b0d9c559dfd13d3eeb5b6a050b4c2724f7c Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Wed, 31 Jan 2024 11:56:24 -0600 Subject: [PATCH 15/26] Added global.json for pipelines (#6737) Co-authored-by: Tracy Boehrer --- global.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 global.json diff --git a/global.json b/global.json new file mode 100644 index 0000000000..75f5044ab6 --- /dev/null +++ b/global.json @@ -0,0 +1,10 @@ +{ + "sdk": { + "version": "6.x", + "rollForward": "latestFeature" + }, + "msbuild-sdks": { + "Microsoft.Build.CentralPackageVersions": "2.0.147", + "Microsoft.Build.Traversal": "3.0.54" + } +} \ No newline at end of file From 01548c1f1937efd13464107be4962c73b55f65dd Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 1 Feb 2024 11:20:18 -0600 Subject: [PATCH 16/26] release.csproj (#6738) Co-authored-by: Tracy Boehrer --- release.csproj | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 release.csproj diff --git a/release.csproj b/release.csproj new file mode 100644 index 0000000000..4040b2f203 --- /dev/null +++ b/release.csproj @@ -0,0 +1,10 @@ + + + + + true + + + + + \ No newline at end of file From eb4fa4955db6e3d61014c833c6b9a2b7aa766bd8 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 1 Feb 2024 12:19:50 -0600 Subject: [PATCH 17/26] Removed release.proj (#6739) Co-authored-by: Tracy Boehrer --- release.proj | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 release.proj diff --git a/release.proj b/release.proj deleted file mode 100644 index 4040b2f203..0000000000 --- a/release.proj +++ /dev/null @@ -1,10 +0,0 @@ - - - - - true - - - - - \ No newline at end of file From 9c4a1af6e93e1eaf55f44106d6c8e333acce0891 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 1 Feb 2024 14:25:47 -0600 Subject: [PATCH 18/26] Removed Copyright from generated code (#6740) Co-authored-by: Tracy Boehrer --- .../content/CoreBot.Tests/Bots/DialogAndWelcomeBotTests.cs | 5 +---- .../content/CoreBot.Tests/Bots/DialogBotTests.cs | 5 +---- .../content/CoreBot.Tests/Common/BotTestBase.cs | 5 +---- .../content/CoreBot.Tests/Common/SimpleMockFactory.cs | 5 +---- .../content/CoreBot.Tests/Controllers/BotControllerTests.cs | 5 +---- .../content/CoreBot.Tests/Dialogs/BookingDialogTests.cs | 5 +---- .../CoreBot.Tests/Dialogs/CancelAndHelpDialogTests.cs | 5 +---- .../content/CoreBot.Tests/Dialogs/DateResolverDialogTests.cs | 5 +---- .../content/CoreBot.Tests/Dialogs/MainDialogTests.cs | 5 +---- .../CoreBot.Tests/Dialogs/TestData/BookingDialogTestCase.cs | 5 +---- .../Dialogs/TestData/BookingDialogTestsDataGenerator.cs | 5 +---- .../Dialogs/TestData/DateResolverDialogTestCase.cs | 5 +---- .../Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs | 5 +---- .../content/CoreBot/AdapterWithErrorHandler.cs | 5 +---- .../content/CoreBot/BookingDetails.cs | 5 +---- .../content/CoreBot/Bots/DialogAndWelcomeBot.cs | 5 +---- .../content/CoreBot/Bots/DialogBot.cs | 5 +---- .../content/CoreBot/CognitiveModels/FlightBookingEx.cs | 3 +-- .../content/CoreBot/Controllers/BotController.cs | 5 +---- .../content/CoreBot/Dialogs/BookingDialog.cs | 5 +---- .../content/CoreBot/Dialogs/CancelAndHelpDialog.cs | 5 +---- .../content/CoreBot/Dialogs/DateResolverDialog.cs | 5 +---- .../content/CoreBot/Dialogs/MainDialog.cs | 5 +---- .../content/CoreBot/FlightBookingRecognizer.cs | 5 +---- .../content/CoreBot/Program.cs | 5 +---- .../content/CoreBot/Startup.cs | 5 +---- .../content/AdapterWithErrorHandler.cs | 5 +---- .../content/Bots/EchoBot.cs | 5 +---- .../content/Controllers/BotController.cs | 5 +---- .../Microsoft.BotFramework.CSharp.EchoBot/content/Program.cs | 5 +---- .../Microsoft.BotFramework.CSharp.EchoBot/content/Startup.cs | 5 +---- .../content/AdapterWithErrorHandler.cs | 5 +---- .../content/Controllers/BotController.cs | 5 +---- .../content/EmptyBot.cs | 5 +---- .../content/Program.cs | 5 +---- .../content/Startup.cs | 5 +---- .../CoreBot/AdapterWithErrorHandler.cs | 5 +---- .../UncompressedProjectTemplates/CoreBot/BookingDetails.cs | 5 +---- .../CoreBot/Bots/DialogAndWelcomeBot.cs | 5 +---- .../UncompressedProjectTemplates/CoreBot/Bots/DialogBot.cs | 5 +---- .../CoreBot/CognitiveModels/FlightBookingEx.cs | 3 +-- .../CoreBot/Controllers/BotController.cs | 5 +---- .../CoreBot/Dialogs/BookingDialog.cs | 5 +---- .../CoreBot/Dialogs/CancelAndHelpDialog.cs | 5 +---- .../CoreBot/Dialogs/DateResolverDialog.cs | 5 +---- .../CoreBot/Dialogs/MainDialog.cs | 5 +---- .../CoreBot/FlightBookingRecognizer.cs | 3 +-- .../UncompressedProjectTemplates/CoreBot/Program.cs | 5 +---- .../UncompressedProjectTemplates/CoreBot/Startup.cs | 5 +---- .../CoreBot.tests/Bots/DialogAndWelcomeBotTests.cs | 3 +-- .../CoreBotWithTests/CoreBot.tests/Bots/DialogBotTests.cs | 3 +-- .../CoreBotWithTests/CoreBot.tests/Common/BotTestBase.cs | 3 +-- .../CoreBot.tests/Common/SimpleMockFactory.cs | 3 +-- .../CoreBot.tests/Controllers/BotControllerTests.cs | 3 +-- .../CoreBot.tests/Dialogs/BookingDialogTests.cs | 3 +-- .../CoreBot.tests/Dialogs/CancelAndHelpDialogTests.cs | 3 +-- .../CoreBot.tests/Dialogs/DateResolverDialogTests.cs | 3 +-- .../CoreBot.tests/Dialogs/MainDialogTests.cs | 3 +-- .../CoreBot.tests/Dialogs/TestData/BookingDialogTestCase.cs | 3 +-- .../Dialogs/TestData/BookingDialogTestsDataGenerator.cs | 3 +-- .../Dialogs/TestData/DateResolverDialogTestCase.cs | 3 +-- .../Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs | 3 +-- .../CoreBotWithTests/CoreBot/AdapterWithErrorHandler.cs | 5 +---- .../CoreBotWithTests/CoreBot/BookingDetails.cs | 5 +---- .../CoreBotWithTests/CoreBot/Bots/DialogAndWelcomeBot.cs | 5 +---- .../CoreBotWithTests/CoreBot/Bots/DialogBot.cs | 5 +---- .../CoreBot/CognitiveModels/FlightBookingEx.cs | 3 +-- .../CoreBotWithTests/CoreBot/Controllers/BotController.cs | 5 +---- .../CoreBotWithTests/CoreBot/Dialogs/BookingDialog.cs | 5 +---- .../CoreBotWithTests/CoreBot/Dialogs/CancelAndHelpDialog.cs | 5 +---- .../CoreBotWithTests/CoreBot/Dialogs/DateResolverDialog.cs | 5 +---- .../CoreBotWithTests/CoreBot/Dialogs/MainDialog.cs | 5 +---- .../CoreBotWithTests/CoreBot/FlightBookingRecognizer.cs | 3 +-- .../CoreBotWithTests/CoreBot/Program.cs | 5 +---- .../CoreBotWithTests/CoreBot/Startup.cs | 5 +---- .../EchoBot/AdapterWithErrorHandler.cs | 5 +---- .../UncompressedProjectTemplates/EchoBot/Bots/EchoBot.cs | 5 +---- .../EchoBot/Controllers/BotController.cs | 5 +---- .../UncompressedProjectTemplates/EchoBot/Program.cs | 5 +---- .../UncompressedProjectTemplates/EchoBot/Startup.cs | 5 +---- .../EmptyBot/AdapterWithErrorHandler.cs | 5 +---- .../EmptyBot/Controllers/BotController.cs | 5 +---- .../UncompressedProjectTemplates/EmptyBot/EmptyBot.cs | 3 +-- .../UncompressedProjectTemplates/EmptyBot/Program.cs | 5 +---- .../UncompressedProjectTemplates/EmptyBot/Startup.cs | 5 +---- 85 files changed, 85 insertions(+), 302 deletions(-) diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogAndWelcomeBotTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogAndWelcomeBotTests.cs index d635da7e5a..6d6948f4d0 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogAndWelcomeBotTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogAndWelcomeBotTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Collections.Generic; using System.Linq; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogBotTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogBotTests.cs index 09b34812bf..8bfcea9ae8 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogBotTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Bots/DialogBotTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.Threading; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/BotTestBase.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/BotTestBase.cs index 36844c9ef5..40c0f9367f 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/BotTestBase.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/BotTestBase.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.IO; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/SimpleMockFactory.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/SimpleMockFactory.cs index 92fdc64bb9..e9daf16b3e 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/SimpleMockFactory.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Common/SimpleMockFactory.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading; using System.Threading.Tasks; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Controllers/BotControllerTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Controllers/BotControllerTests.cs index 55d11c68cf..0431706521 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Controllers/BotControllerTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Controllers/BotControllerTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading; using System.Threading.Tasks; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/BookingDialogTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/BookingDialogTests.cs index 87f7d076f8..79e59493d5 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/BookingDialogTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/BookingDialogTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading.Tasks; using CoreBot.Dialogs; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/CancelAndHelpDialogTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/CancelAndHelpDialogTests.cs index ef69ad7725..55364de15c 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/CancelAndHelpDialogTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/CancelAndHelpDialogTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.Threading; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/DateResolverDialogTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/DateResolverDialogTests.cs index 75c406456b..6f7dc4f150 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/DateResolverDialogTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/DateResolverDialogTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading.Tasks; using CoreBot.Dialogs; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/MainDialogTests.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/MainDialogTests.cs index c1d16c14c8..bd494c9fac 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/MainDialogTests.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/MainDialogTests.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.Collections.Generic; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestCase.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestCase.cs index 9826a3729a..225598a903 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestCase.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestCase.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using CoreBot; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs index b5917ed65c..89e20ee64c 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.Collections.Generic; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestCase.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestCase.cs index a853cd753d..dc349d0e03 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestCase.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestCase.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ namespace CoreBot.Tests.Dialogs.TestData { diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs index 6e87d8b664..12a6d6d047 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.Collections.Generic; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/AdapterWithErrorHandler.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/AdapterWithErrorHandler.cs index 09fc9d939f..d0e53fd610 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/AdapterWithErrorHandler.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using Microsoft.Bot.Builder; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/BookingDetails.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/BookingDetails.cs index 324a3fd829..26c2658d17 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/BookingDetails.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/BookingDetails.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ namespace CoreBot { diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogAndWelcomeBot.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogAndWelcomeBot.cs index 53b138e630..f7b6f25cea 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogAndWelcomeBot.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogAndWelcomeBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Collections.Generic; using System.IO; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogBot.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogBot.cs index 60953cdbc1..74c461da5d 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogBot.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Bots/DialogBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading; using System.Threading.Tasks; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CognitiveModels/FlightBookingEx.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CognitiveModels/FlightBookingEx.cs index 14a1a2793e..c91618b5d6 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CognitiveModels/FlightBookingEx.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CognitiveModels/FlightBookingEx.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Linq; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Controllers/BotController.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Controllers/BotController.cs index 52d1431b17..78aa6b772c 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Controllers/BotController.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/BookingDialog.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/BookingDialog.cs index c285d0b92f..ccd1b35a67 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/BookingDialog.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/BookingDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading; using System.Threading.Tasks; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/CancelAndHelpDialog.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/CancelAndHelpDialog.cs index c46bd6f912..8a6665e130 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/CancelAndHelpDialog.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/CancelAndHelpDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading; using System.Threading.Tasks; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/DateResolverDialog.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/DateResolverDialog.cs index 9d7da418d2..229e79414c 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/DateResolverDialog.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/DateResolverDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Collections.Generic; using System.Threading; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/MainDialog.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/MainDialog.cs index f0b553e3b4..3e0aa7cacb 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/MainDialog.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Dialogs/MainDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System; using System.Collections.Generic; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/FlightBookingRecognizer.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/FlightBookingRecognizer.cs index e9c628ffac..0a982dee9f 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/FlightBookingRecognizer.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/FlightBookingRecognizer.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using System.Threading; using System.Threading.Tasks; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Program.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Program.cs index c9626f0b62..2065bfe308 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Program.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Startup.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Startup.cs index 7499c8b30d..ea6248aa8d 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Startup.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with CoreBot .NET Template version __vX.X.X__ +// Generated with CoreBot .NET Template version __vX.X.X__ using CoreBot.Bots; using CoreBot.Dialogs; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/AdapterWithErrorHandler.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/AdapterWithErrorHandler.cs index 179f6ee50d..caa37afbf7 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/AdapterWithErrorHandler.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EchoBot .NET Template version __vX.X.X__ +// Generated with EchoBot .NET Template version __vX.X.X__ using Microsoft.Bot.Builder.Integration.AspNet.Core; using Microsoft.Bot.Builder.TraceExtensions; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Bots/EchoBot.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Bots/EchoBot.cs index 28eac917d9..2e6666a81d 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Bots/EchoBot.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Bots/EchoBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EchoBot .NET Template version __vX.X.X__ +// Generated with EchoBot .NET Template version __vX.X.X__ using System.Collections.Generic; using System.Threading; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Controllers/BotController.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Controllers/BotController.cs index b70538586b..d9cc7a9e33 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Controllers/BotController.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EchoBot .NET Template version __vX.X.X__ +// Generated with EchoBot .NET Template version __vX.X.X__ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Program.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Program.cs index 6ad5c992bf..2b89051e66 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Program.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EchoBot .NET Template version __vX.X.X__ +// Generated with EchoBot .NET Template version __vX.X.X__ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Startup.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Startup.cs index a133a77a6e..efda137852 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Startup.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EchoBot .NET Template version __vX.X.X__ +// Generated with EchoBot .NET Template version __vX.X.X__ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/AdapterWithErrorHandler.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/AdapterWithErrorHandler.cs index a86ed5c93f..731ccf18aa 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/AdapterWithErrorHandler.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EmptyBot .NET Template version __vX.X.X__ +// Generated with EmptyBot .NET Template version __vX.X.X__ using Microsoft.Bot.Builder.Integration.AspNet.Core; using Microsoft.Bot.Builder.TraceExtensions; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Controllers/BotController.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Controllers/BotController.cs index 7712ec04f9..3a92a9d039 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Controllers/BotController.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EmptyBot .NET Template version __vX.X.X__ +// Generated with EmptyBot .NET Template version __vX.X.X__ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/EmptyBot.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/EmptyBot.cs index dbe3a15d13..0873d5cf41 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/EmptyBot.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/EmptyBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EmptyBot .NET Template version __vX.X.X__ +// Generated with EmptyBot .NET Template version __vX.X.X__ using System.Collections.Generic; using System.Threading; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Program.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Program.cs index 255a032d32..6af065fd88 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Program.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EmptyBot .NET Template version __vX.X.X__ +// Generated with EmptyBot .NET Template version __vX.X.X__ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Startup.cs b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Startup.cs index 62d9beed35..da7ca2cd10 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Startup.cs +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with EmptyBot .NET Template version __vX.X.X__ +// Generated with EmptyBot .NET Template version __vX.X.X__ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/AdapterWithErrorHandler.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/AdapterWithErrorHandler.cs index 46db42e7e2..e2fe8de777 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/AdapterWithErrorHandler.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using Microsoft.Bot.Builder; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/BookingDetails.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/BookingDetails.cs index 291ac02ed0..7b9e348da2 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/BookingDetails.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/BookingDetails.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ namespace $safeprojectname$ { diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogAndWelcomeBot.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogAndWelcomeBot.cs index e83d422dad..81ed0f1c8b 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogAndWelcomeBot.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogAndWelcomeBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Collections.Generic; using System.IO; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogBot.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogBot.cs index a4c389d85f..92b0ac3cde 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogBot.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Bots/DialogBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CognitiveModels/FlightBookingEx.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CognitiveModels/FlightBookingEx.cs index dfb6849b26..bbbbc46bde 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CognitiveModels/FlightBookingEx.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CognitiveModels/FlightBookingEx.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Linq; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Controllers/BotController.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Controllers/BotController.cs index abe8872f0d..c34180142c 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Controllers/BotController.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/BookingDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/BookingDialog.cs index d414047584..1df0076048 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/BookingDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/BookingDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/CancelAndHelpDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/CancelAndHelpDialog.cs index c242b5d229..0e9c039446 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/CancelAndHelpDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/CancelAndHelpDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/DateResolverDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/DateResolverDialog.cs index bfac5c460c..eebdbb6a7a 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/DateResolverDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/DateResolverDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Collections.Generic; using System.Threading; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/MainDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/MainDialog.cs index ab596fd4ce..46d65c2760 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/MainDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Dialogs/MainDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Collections.Generic; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/FlightBookingRecognizer.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/FlightBookingRecognizer.cs index 094ec705e1..5f50672409 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/FlightBookingRecognizer.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/FlightBookingRecognizer.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Program.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Program.cs index eaeca0ac5f..dd8e0ff397 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Program.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Startup.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Startup.cs index 0caf2e2a1f..7ca1d29da1 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Startup.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogAndWelcomeBotTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogAndWelcomeBotTests.cs index 5671e9e320..6589617366 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogAndWelcomeBotTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogAndWelcomeBotTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Collections.Generic; using System.Linq; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogBotTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogBotTests.cs index e83238fb8f..0e95e8be0b 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogBotTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Bots/DialogBotTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Threading; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/BotTestBase.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/BotTestBase.cs index 698092beb1..6bfa89fbbb 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/BotTestBase.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/BotTestBase.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.IO; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/SimpleMockFactory.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/SimpleMockFactory.cs index 0855813b12..05c1cffb7e 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/SimpleMockFactory.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Common/SimpleMockFactory.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Controllers/BotControllerTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Controllers/BotControllerTests.cs index 4d6bf86634..d1bc18d79b 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Controllers/BotControllerTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Controllers/BotControllerTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/BookingDialogTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/BookingDialogTests.cs index 87a2841c74..10a40c301a 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/BookingDialogTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/BookingDialogTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading.Tasks; using $ext_safeprojectname$.Tests.Common; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/CancelAndHelpDialogTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/CancelAndHelpDialogTests.cs index 65a5fe8453..420b6330e8 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/CancelAndHelpDialogTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/CancelAndHelpDialogTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Threading; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/DateResolverDialogTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/DateResolverDialogTests.cs index 80fc2980fc..2480c3eca8 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/DateResolverDialogTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/DateResolverDialogTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading.Tasks; using $ext_safeprojectname$.Tests.Common; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/MainDialogTests.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/MainDialogTests.cs index 60b25ea490..8b6f8ff221 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/MainDialogTests.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/MainDialogTests.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Collections.Generic; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestCase.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestCase.cs index c8c9e5f0ea..29a822dbc6 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestCase.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestCase.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using $ext_safeprojectname$; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs index 0bb149447e..db9b0271a3 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/BookingDialogTestsDataGenerator.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Collections.Generic; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestCase.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestCase.cs index f8156b7018..e2da8f0356 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestCase.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestCase.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ namespace $ext_safeprojectname$.Tests.Dialogs.TestData { diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs index 4bebbae750..453ef9733b 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/Dialogs/TestData/DateResolverDialogTestsDataGenerator.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Collections.Generic; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/AdapterWithErrorHandler.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/AdapterWithErrorHandler.cs index 46db42e7e2..e2fe8de777 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/AdapterWithErrorHandler.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using Microsoft.Bot.Builder; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/BookingDetails.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/BookingDetails.cs index 150d8c8530..ecb0860388 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/BookingDetails.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/BookingDetails.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ namespace $ext_safeprojectname$ { diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogAndWelcomeBot.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogAndWelcomeBot.cs index e2d0ef9e68..4324c64c98 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogAndWelcomeBot.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogAndWelcomeBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Collections.Generic; using System.IO; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogBot.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogBot.cs index 74954bf808..498e6a4d95 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogBot.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Bots/DialogBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CognitiveModels/FlightBookingEx.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CognitiveModels/FlightBookingEx.cs index e69feb2813..dac42e0d73 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CognitiveModels/FlightBookingEx.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CognitiveModels/FlightBookingEx.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Linq; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Controllers/BotController.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Controllers/BotController.cs index 485bbf72e7..b8883d0e02 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Controllers/BotController.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/BookingDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/BookingDialog.cs index 6408553df4..0fdc8d44cd 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/BookingDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/BookingDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/CancelAndHelpDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/CancelAndHelpDialog.cs index 35f211b6d6..8815207947 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/CancelAndHelpDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/CancelAndHelpDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/DateResolverDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/DateResolverDialog.cs index 9780d89709..a2baedc1c4 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/DateResolverDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/DateResolverDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Collections.Generic; using System.Threading; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/MainDialog.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/MainDialog.cs index 88b60989eb..ac125577d4 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/MainDialog.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Dialogs/MainDialog.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System; using System.Collections.Generic; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/FlightBookingRecognizer.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/FlightBookingRecognizer.cs index ad90fd082d..4198e0c2be 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/FlightBookingRecognizer.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/FlightBookingRecognizer.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Threading; using System.Threading.Tasks; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Program.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Program.cs index e214f64e9a..850107363c 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Program.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Startup.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Startup.cs index 2606731b07..dc239a437e 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Startup.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/AdapterWithErrorHandler.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/AdapterWithErrorHandler.cs index b7d1a653f9..17813448fa 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/AdapterWithErrorHandler.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using Microsoft.Bot.Builder.Integration.AspNet.Core; using Microsoft.Bot.Builder.TraceExtensions; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Bots/EchoBot.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Bots/EchoBot.cs index 2c68ff68d2..192cc87b06 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Bots/EchoBot.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Bots/EchoBot.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ using System.Collections.Generic; using System.Threading; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Controllers/BotController.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Controllers/BotController.cs index c0e4eb4961..cb85c17cf9 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Controllers/BotController.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Program.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Program.cs index 85765b2286..197a52f765 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Program.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Startup.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Startup.cs index 08a12e616e..027ac7e1fd 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Startup.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v$templateversion$ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/AdapterWithErrorHandler.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/AdapterWithErrorHandler.cs index b7d1a653f9..17813448fa 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/AdapterWithErrorHandler.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/AdapterWithErrorHandler.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using Microsoft.Bot.Builder.Integration.AspNet.Core; using Microsoft.Bot.Builder.TraceExtensions; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Controllers/BotController.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Controllers/BotController.cs index 04b719b4f5..057c64e23e 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Controllers/BotController.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Controllers/BotController.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EmptyBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EmptyBot v$templateversion$ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.cs index bb8e48ede2..bbdafcd507 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.cs @@ -1,5 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. +// Generated with Bot Builder V4 SDK Template for Visual Studio CoreBot v$templateversion$ using System.Collections.Generic; using System.Threading; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Program.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Program.cs index 6dd9983da9..e7d49103f6 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Program.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Program.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EmptyBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EmptyBot v$templateversion$ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Startup.cs b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Startup.cs index 399e93acaf..3e6801a438 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Startup.cs +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/Startup.cs @@ -1,7 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EmptyBot v$templateversion$ +// Generated with Bot Builder V4 SDK Template for Visual Studio EmptyBot v$templateversion$ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; From 4de1d65ccd7856675331bb29e3bb250e5852888c Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 1 Feb 2024 14:59:42 -0600 Subject: [PATCH 19/26] Generators SDK 4.22.0 (#6742) Co-authored-by: Tracy Boehrer --- .../Microsoft.BotFramework.CSharp.CoreBot.nuspec | 2 +- .../content/.template.config/template.json | 4 ++-- .../content/CoreBot.Tests/CoreBot.Tests.csproj | 4 ++-- .../content/CoreBot/CoreBot.csproj | 6 +++--- .../Microsoft.BotFramework.CSharp.EchoBot.nuspec | 2 +- .../content/.template.config/template.json | 4 ++-- .../content/Microsoft.BotFramework.EchoBot.csproj | 2 +- .../Microsoft.BotFramework.CSharp.EmptyBot.nuspec | 2 +- .../content/.template.config/template.json | 4 ++-- .../content/Microsoft.BotFramework.EmptyBot.csproj | 2 +- generators/dotnet-templates/README.md | 6 +++--- generators/vsix-vs-win/BotBuilderVSIX-V4/HOW_TO_VERSION.md | 2 +- .../UncompressedProjectTemplates/CoreBot/CoreBot.csproj | 6 +++--- .../UncompressedProjectTemplates/CoreBot/CoreBot.vstemplate | 2 +- .../CoreBotWithTests/CoreBot.tests/CoreBot.Tests.csproj | 2 +- .../CoreBotWithTests/CoreBot.tests/CoreBot.tests.vstemplate | 2 +- .../CoreBotWithTests/CoreBot/CoreBot.csproj | 6 +++--- .../CoreBotWithTests/CoreBot/CoreBot.vstemplate | 2 +- .../CoreBotWithTests/CoreBotWithTests.vstemplate | 2 +- .../UncompressedProjectTemplates/EchoBot/EchoBot.csproj | 2 +- .../UncompressedProjectTemplates/EchoBot/EchoBot.vstemplate | 2 +- .../UncompressedProjectTemplates/EmptyBot/EmptyBot.csproj | 2 +- .../EmptyBot/EmptyBot.vstemplate | 2 +- .../BotBuilderVSIX-V4/source.extension.vsixmanifest | 2 +- 24 files changed, 36 insertions(+), 36 deletions(-) diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/Microsoft.BotFramework.CSharp.CoreBot.nuspec b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/Microsoft.BotFramework.CSharp.CoreBot.nuspec index f99f37631b..4e50a0a694 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/Microsoft.BotFramework.CSharp.CoreBot.nuspec +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/Microsoft.BotFramework.CSharp.CoreBot.nuspec @@ -2,7 +2,7 @@ Microsoft.Bot.Framework.CSharp.CoreBot - 4.18.1 + 4.22.0 A .NET Core Template for Microsoft Bot Framework v4. Will let you quickly set up a conversational AI bot with core features every bot is likely to use. diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/.template.config/template.json b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/.template.config/template.json index 473f91664b..d144487133 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/.template.config/template.json +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/.template.config/template.json @@ -12,7 +12,7 @@ "defaultName": "CoreBot", "groupIdentity": "Microsoft.BotFramework.CSharp.CoreBot", "identity": "Microsoft.BotFramework.CSharp.CoreBot", - "name": "Bot Framework Core Bot (v4.18.1)", + "name": "Bot Framework Core Bot (v4.22.0)", "preferNameDirectory": true, "sourceName": "Microsoft.BotFramework.CoreBot", "shortName": "corebot", @@ -26,7 +26,7 @@ "type": "generated", "generator": "constant", "parameters": { - "value": "v4.18.1" + "value": "v4.22.0" }, "replaces": "__vX.X.X__" }, diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/CoreBot.Tests.csproj b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/CoreBot.Tests.csproj index 1029b87bb4..747fafa73b 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/CoreBot.Tests.csproj +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot.Tests/CoreBot.Tests.csproj @@ -22,8 +22,8 @@ - - + + diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CoreBot.csproj b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CoreBot.csproj index e83878db70..49ff5d4629 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CoreBot.csproj +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.CoreBot/content/CoreBot/CoreBot.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/Microsoft.BotFramework.CSharp.EchoBot.nuspec b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/Microsoft.BotFramework.CSharp.EchoBot.nuspec index b99a56ec09..63772a9ba7 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/Microsoft.BotFramework.CSharp.EchoBot.nuspec +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/Microsoft.BotFramework.CSharp.EchoBot.nuspec @@ -2,7 +2,7 @@ Microsoft.Bot.Framework.CSharp.EchoBot - 4.18.1 + 4.22.0 A .NET Core Template for Microsoft Bot Framework v4. Will let you quickly set up a bot that simply "echoes" back to the user anything the user says to the bot. This is a little more than "Hello World!" diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/.template.config/template.json b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/.template.config/template.json index d66a786ba1..a69d513994 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/.template.config/template.json +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/.template.config/template.json @@ -11,7 +11,7 @@ "defaultName": "EchoBot", "groupIdentity": "Microsoft.BotFramework.CSharp.EchoBot", "identity": "Microsoft.BotFramework.CSharp.EchoBot", - "name": "Bot Framework Echo Bot (v4.18.1)", + "name": "Bot Framework Echo Bot (v4.22.0)", "preferNameDirectory": true, "sourceName": "Microsoft.BotFramework.EchoBot", "shortName": "echobot", @@ -25,7 +25,7 @@ "type": "generated", "generator": "constant", "parameters": { - "value": "v4.18.1" + "value": "v4.22.0" }, "replaces": "__vX.X.X__" }, diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Microsoft.BotFramework.EchoBot.csproj b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Microsoft.BotFramework.EchoBot.csproj index 5b22d10544..5fd86bb4f3 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Microsoft.BotFramework.EchoBot.csproj +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EchoBot/content/Microsoft.BotFramework.EchoBot.csproj @@ -7,7 +7,7 @@ - + diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/Microsoft.BotFramework.CSharp.EmptyBot.nuspec b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/Microsoft.BotFramework.CSharp.EmptyBot.nuspec index a685404f2e..464b3af86b 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/Microsoft.BotFramework.CSharp.EmptyBot.nuspec +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/Microsoft.BotFramework.CSharp.EmptyBot.nuspec @@ -2,7 +2,7 @@ Microsoft.Bot.Framework.CSharp.EmptyBot - 4.18.1 + 4.22.0 A .NET Core Template for Microsoft Bot Framework v4. A good template if you are familiar with Bot Framework v4, and simple want a basic skeleton project. diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/.template.config/template.json b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/.template.config/template.json index 03186ee321..ab549fbf5f 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/.template.config/template.json +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/.template.config/template.json @@ -11,7 +11,7 @@ "defaultName": "EmptyBot", "groupIdentity": "Microsoft.BotFramework.CSharp.EmptyBot", "identity": "Microsoft.BotFramework.CSharp.EmptyBot", - "name": "Bot Framework Empty Bot (v4.18.1)", + "name": "Bot Framework Empty Bot (v4.22.0)", "preferNameDirectory": true, "sourceName": "Microsoft.BotFramework.EmptyBot", "shortName": "emptybot", @@ -25,7 +25,7 @@ "type": "generated", "generator": "constant", "parameters": { - "value": "v4.18.1" + "value": "v4.22.0" }, "replaces": "__vX.X.X__" }, diff --git a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Microsoft.BotFramework.EmptyBot.csproj b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Microsoft.BotFramework.EmptyBot.csproj index b1865d9a30..ad2b6db81e 100644 --- a/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Microsoft.BotFramework.EmptyBot.csproj +++ b/generators/dotnet-templates/Microsoft.BotFramework.CSharp.EmptyBot/content/Microsoft.BotFramework.EmptyBot.csproj @@ -8,7 +8,7 @@ - + diff --git a/generators/dotnet-templates/README.md b/generators/dotnet-templates/README.md index c072f660af..98160c9fd0 100644 --- a/generators/dotnet-templates/README.md +++ b/generators/dotnet-templates/README.md @@ -250,13 +250,13 @@ nuget pack Microsoft.BotFramework.CSharp.CoreBot The `nuget pack` command will build a package using a filename convention that includes the value of the `version` tag of the project's `.nuspec` file. For example, a `.nuspec` file that has the following `version` tag specified: ```xml - 4.18.1 + 4.22.0 ``` -Given the example above with `.nuspec` `version` of 4.18.1, running `nuget pack Microsoft.BotFramework.CSharp.EchoBot` will create a NuGet package named `Microsoft.Bot.Framework.CSharp.EchoBot.4.18.1.nupkg`. We'll use this NuGet package name in subsequent steps. +Given the example above with `.nuspec` `version` of 4.22.0, running `nuget pack Microsoft.BotFramework.CSharp.EchoBot` will create a NuGet package named `Microsoft.Bot.Framework.CSharp.EchoBot.4.22.0.nupkg`. We'll use this NuGet package name in subsequent steps. ```bash # install the locally built .nupkg (EchoBot template, assuming 4.9.0 version tag) -dotnet new -i ./Microsoft.Bot.Framework.CSharp.EchoBot.4.18.1.nupkg +dotnet new -i ./Microsoft.Bot.Framework.CSharp.EchoBot.4.22.0.nupkg ``` To see a list of currently installed templates. With this command you should now see the locally build and installed NuGet package. diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/HOW_TO_VERSION.md b/generators/vsix-vs-win/BotBuilderVSIX-V4/HOW_TO_VERSION.md index c0edc48ee5..2dc799bc30 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/HOW_TO_VERSION.md +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/HOW_TO_VERSION.md @@ -17,7 +17,7 @@ The `.vstemplate` files have a `` tag that ```xml - <<<-HAND-CRAFTED-semver + <<<-HAND-CRAFTED-semver ``` diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.csproj b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.csproj index 02bac937d0..8a1e17e1fe 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.csproj +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.vstemplate b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.vstemplate index 72f7cff599..5adc0edb2a 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.vstemplate +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBot/CoreBot.vstemplate @@ -23,7 +23,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.Tests.csproj b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.Tests.csproj index b9a27a50d6..0410765459 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.Tests.csproj +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.Tests.csproj @@ -22,7 +22,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.tests.vstemplate b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.tests.vstemplate index 7bcc01ad17..7b182e9d7e 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.tests.vstemplate +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot.tests/CoreBot.tests.vstemplate @@ -24,7 +24,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.csproj b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.csproj index be6ea9376d..50975eb554 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.csproj +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.vstemplate b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.vstemplate index 186004b6ef..f81b4daa72 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.vstemplate +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBot/CoreBot.vstemplate @@ -24,7 +24,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBotWithTests.vstemplate b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBotWithTests.vstemplate index 5bfd8daefe..7f1477608e 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBotWithTests.vstemplate +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/CoreBotWithTests/CoreBotWithTests.vstemplate @@ -23,7 +23,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.csproj b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.csproj index 12d32013f3..224f9d1db4 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.csproj +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.csproj @@ -7,7 +7,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.vstemplate b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.vstemplate index 4eacbcdd2d..8d88e4a4b0 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.vstemplate +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EchoBot/EchoBot.vstemplate @@ -23,7 +23,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.csproj b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.csproj index 12d32013f3..224f9d1db4 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.csproj +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.csproj @@ -7,7 +7,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.vstemplate b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.vstemplate index 3d5b0d6709..4653c900ad 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.vstemplate +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/UncompressedProjectTemplates/EmptyBot/EmptyBot.vstemplate @@ -23,7 +23,7 @@ - + diff --git a/generators/vsix-vs-win/BotBuilderVSIX-V4/source.extension.vsixmanifest b/generators/vsix-vs-win/BotBuilderVSIX-V4/source.extension.vsixmanifest index b09172033e..4f8cf37c1e 100644 --- a/generators/vsix-vs-win/BotBuilderVSIX-V4/source.extension.vsixmanifest +++ b/generators/vsix-vs-win/BotBuilderVSIX-V4/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Bot Framework v4 SDK Templates for Visual Studio Templates for Microsoft Bot Framework v4. Will let you quickly create a bot that uses core AI capabilities. https://aka.ms/BotBuilderOverview From af83e3fe36fb95ba7d0a17ed848bd26e91fbc8ef Mon Sep 17 00:00:00 2001 From: Jhonatan Sandoval Velasco <122501764+JhontSouth@users.noreply.github.com> Date: Thu, 1 Feb 2024 16:00:18 -0500 Subject: [PATCH 20/26] include content type for json values in blob storage (#6733) --- libraries/Microsoft.Bot.Builder.Azure.Blobs/BlobsStorage.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/Microsoft.Bot.Builder.Azure.Blobs/BlobsStorage.cs b/libraries/Microsoft.Bot.Builder.Azure.Blobs/BlobsStorage.cs index f0267976e1..18e503416d 100644 --- a/libraries/Microsoft.Bot.Builder.Azure.Blobs/BlobsStorage.cs +++ b/libraries/Microsoft.Bot.Builder.Azure.Blobs/BlobsStorage.cs @@ -277,8 +277,10 @@ internal BlobsStorage(BlobContainerClient containerClient, JsonSerializer jsonSe await streamWriter.FlushAsync().ConfigureAwait(false); memoryStream.Seek(0, SeekOrigin.Begin); + var blobHttpHeaders = new BlobHttpHeaders(); + blobHttpHeaders.ContentType = "application/json"; - await blobReference.UploadAsync(memoryStream, conditions: accessCondition, transferOptions: _storageTransferOptions, cancellationToken: cancellationToken).ConfigureAwait(false); + await blobReference.UploadAsync(memoryStream, conditions: accessCondition, transferOptions: _storageTransferOptions, cancellationToken: cancellationToken, httpHeaders: blobHttpHeaders).ConfigureAwait(false); } catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.BadRequest From 36927e12aead1be42884b217c79955356ad56ef1 Mon Sep 17 00:00:00 2001 From: Jhonatan Sandoval Velasco <122501764+JhontSouth@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:29:54 -0500 Subject: [PATCH 21/26] show typing indicator before every message (#6743) --- .../ShowTypingMiddleware.cs | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder/ShowTypingMiddleware.cs b/libraries/Microsoft.Bot.Builder/ShowTypingMiddleware.cs index 86c15892dd..e51cd0c68c 100644 --- a/libraries/Microsoft.Bot.Builder/ShowTypingMiddleware.cs +++ b/libraries/Microsoft.Bot.Builder/ShowTypingMiddleware.cs @@ -66,19 +66,13 @@ public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, Cance var containsMessage = activities.Any(e => e.Type == ActivityTypes.Message); if (containsMessage) { - await FinishTypingTaskAsync(ctx).ConfigureAwait(false); + await ProcessTypingAsync(ctx).ConfigureAwait(false); } return await nextSend().ConfigureAwait(false); }); - // Start a timer to periodically send the typing activity (bots running as skills should not send typing activity) - if (!IsSkillBot(turnContext) && turnContext.Activity.Type == ActivityTypes.Message) - { - // Override the typing background task. - await FinishTypingTaskAsync(turnContext).ConfigureAwait(false); - StartTypingTask(turnContext); - } + await ProcessTypingAsync(turnContext).ConfigureAwait(false); await next(cancellationToken).ConfigureAwait(false); @@ -177,5 +171,19 @@ private async Task FinishTypingTaskAsync(ITurnContext turnContext) _tasks.TryRemove(turnContext.Activity.Conversation.Id, out _); } + + /// + /// Start a timer to periodically send the typing activity (bots running as skills should not send typing activity). + /// + /// The context object for this turn. + private async Task ProcessTypingAsync(ITurnContext turnContext) + { + if (!IsSkillBot(turnContext) && turnContext.Activity.Type == ActivityTypes.Message) + { + // Override the typing background task. + await FinishTypingTaskAsync(turnContext).ConfigureAwait(false); + StartTypingTask(turnContext); + } + } } } From 84df0860cea378569667d9e00875b0707e9c938f Mon Sep 17 00:00:00 2001 From: Joel Mut <62260472+sw-joelmut@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:58:41 -0300 Subject: [PATCH 22/26] Fix LU parser rules to support all comments in a file (#6744) * Update LU parser rules to support only comments * Fix unit tests * Add unit test to cover all comments case --------- Co-authored-by: CeciliaAvila --- .../Generated/LUFileLexer.cs | 321 ++-- .../Generated/LUFileLexer.interp | 2 +- .../Generated/LUFileParser.cs | 1436 +++++++++-------- .../Generated/LUFileParser.interp | 3 +- .../Generated/LUFileParserBaseListener.cs | 12 + .../Generated/LUFileParserBaseVisitor.cs | 10 + .../Generated/LUFileParserListener.cs | 10 + .../Generated/LUFileParserVisitor.cs | 6 + .../LUFileLexer.g4 | 2 +- .../LUFileParser.g4 | 7 +- .../Fixtures/AllComments.json | 5 + .../Fixtures/AllComments.txt | 2 + .../Fixtures/LU_Sections_Unix.json | 4 +- .../Fixtures/LU_Sections_Windows.json | Bin 100884 -> 100892 bytes .../Fixtures/testLU131.json | 2 +- .../Fixtures/testLU139.json | 2 +- .../Fixtures/testLU153.json | 2 +- .../Fixtures/testLU278.json | 464 +++++- ...rosoft.Bot.Builder.Parsers.LU.Tests.csproj | 6 + .../Parser/LuParserTests.cs | 1 + 20 files changed, 1450 insertions(+), 847 deletions(-) create mode 100644 tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.json create mode 100644 tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.txt diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs index aef59d733b..545c561319 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs @@ -122,7 +122,7 @@ static LUFileLexer() { } } private static int[] _serializedATN = { - 4,0,40,739,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7, + 4,0,40,737,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7, 3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11, 2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18, 2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -145,42 +145,42 @@ static LUFileLexer() { 32,275,1,33,5,33,279,8,33,10,33,12,33,282,9,33,1,33,1,33,5,33,286,8,33, 10,33,12,33,289,9,33,1,33,1,33,1,33,1,33,4,33,295,8,33,11,33,12,33,296, 1,34,5,34,300,8,34,10,34,12,34,303,9,34,1,34,1,34,5,34,307,8,34,10,34, - 12,34,310,9,34,1,34,1,34,1,35,4,35,315,8,35,11,35,12,35,316,1,35,5,35, - 320,8,35,10,35,12,35,323,9,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36, - 1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,5,40, - 346,8,40,10,40,12,40,349,9,40,1,40,1,40,5,40,353,8,40,10,40,12,40,356, - 9,40,1,40,1,40,5,40,360,8,40,10,40,12,40,363,9,40,1,40,1,40,5,40,367,8, - 40,10,40,12,40,370,9,40,1,40,1,40,1,40,5,40,375,8,40,10,40,12,40,378,9, - 40,1,40,3,40,381,8,40,1,41,5,41,384,8,41,10,41,12,41,387,9,41,1,41,1,41, - 5,41,391,8,41,10,41,12,41,394,9,41,1,41,1,41,5,41,398,8,41,10,41,12,41, - 401,9,41,1,41,1,41,5,41,405,8,41,10,41,12,41,408,9,41,1,41,5,41,411,8, - 41,10,41,12,41,414,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1, - 42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,5,43,434,8,43,10,43,12,43,437, - 9,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,5,44,449,8,44,10, - 44,12,44,452,9,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1, - 45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,47,1,47,1,47,1,47,1, - 48,3,48,479,8,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51, - 1,51,1,51,1,51,1,51,1,51,1,51,3,51,498,8,51,1,52,1,52,1,52,1,52,1,52,1, - 52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,512,8,52,1,53,1,53,1,53,1,53,1,53, + 12,34,310,9,34,1,35,4,35,313,8,35,11,35,12,35,314,1,35,5,35,318,8,35,10, + 35,12,35,321,9,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1, + 37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,5,40,344,8,40,10, + 40,12,40,347,9,40,1,40,1,40,5,40,351,8,40,10,40,12,40,354,9,40,1,40,1, + 40,5,40,358,8,40,10,40,12,40,361,9,40,1,40,1,40,5,40,365,8,40,10,40,12, + 40,368,9,40,1,40,1,40,1,40,5,40,373,8,40,10,40,12,40,376,9,40,1,40,3,40, + 379,8,40,1,41,5,41,382,8,41,10,41,12,41,385,9,41,1,41,1,41,5,41,389,8, + 41,10,41,12,41,392,9,41,1,41,1,41,5,41,396,8,41,10,41,12,41,399,9,41,1, + 41,1,41,5,41,403,8,41,10,41,12,41,406,9,41,1,41,5,41,409,8,41,10,41,12, + 41,412,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,1,42,1,43,1,43,1,43,1,43,5,43,432,8,43,10,43,12,43,435,9,43,1,43, + 1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,5,44,447,8,44,10,44,12,44, + 450,9,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,47,1,47,1,47,1,47,1,48,3,48,477, + 8,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51,1,51,1,51, + 1,51,1,51,1,51,1,51,3,51,496,8,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1, + 52,1,52,1,52,1,52,1,52,3,52,510,8,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, - 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,583,8,53,1,54,1,54,5,54,587, - 8,54,10,54,12,54,590,9,54,1,54,1,54,1,55,1,55,5,55,596,8,55,10,55,12,55, - 599,9,55,1,55,1,55,1,56,1,56,5,56,605,8,56,10,56,12,56,608,9,56,1,57,4, - 57,611,8,57,11,57,12,57,612,1,58,1,58,4,58,617,8,58,11,58,12,58,618,1, - 58,1,58,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,3,61,632,8,61,1,61, - 1,61,1,61,1,61,1,61,1,62,1,62,1,62,3,62,642,8,62,1,62,1,62,1,62,5,62,647, - 8,62,10,62,12,62,650,9,62,1,63,1,63,1,64,1,64,1,64,1,64,1,65,3,65,659, - 8,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,3,66,668,8,66,1,67,1,67,1,67,1, - 67,5,67,674,8,67,10,67,12,67,677,9,67,1,67,5,67,680,8,67,10,67,12,67,683, - 9,67,1,67,1,67,1,68,4,68,688,8,68,11,68,12,68,689,1,69,1,69,1,69,1,69, - 1,70,3,70,697,8,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,5,71,706,8,71,10, - 71,12,71,709,9,71,1,71,1,71,1,72,1,72,5,72,715,8,72,10,72,12,72,718,9, - 72,1,73,4,73,721,8,73,11,73,12,73,722,1,74,1,74,1,75,3,75,728,8,75,1,75, - 1,75,1,75,1,75,1,75,1,76,4,76,736,8,76,11,76,12,76,737,7,354,368,376,392, - 435,450,689,0,77,6,0,8,0,10,0,12,0,14,0,16,0,18,0,20,0,22,0,24,0,26,0, + 1,53,1,53,1,53,1,53,1,53,1,53,3,53,581,8,53,1,54,1,54,5,54,585,8,54,10, + 54,12,54,588,9,54,1,54,1,54,1,55,1,55,5,55,594,8,55,10,55,12,55,597,9, + 55,1,55,1,55,1,56,1,56,5,56,603,8,56,10,56,12,56,606,9,56,1,57,4,57,609, + 8,57,11,57,12,57,610,1,58,1,58,4,58,615,8,58,11,58,12,58,616,1,58,1,58, + 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,3,61,630,8,61,1,61,1,61,1, + 61,1,61,1,61,1,62,1,62,1,62,3,62,640,8,62,1,62,1,62,1,62,5,62,645,8,62, + 10,62,12,62,648,9,62,1,63,1,63,1,64,1,64,1,64,1,64,1,65,3,65,657,8,65, + 1,65,1,65,1,65,1,65,1,65,1,66,1,66,3,66,666,8,66,1,67,1,67,1,67,1,67,5, + 67,672,8,67,10,67,12,67,675,9,67,1,67,5,67,678,8,67,10,67,12,67,681,9, + 67,1,67,1,67,1,68,4,68,686,8,68,11,68,12,68,687,1,69,1,69,1,69,1,69,1, + 70,3,70,695,8,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,5,71,704,8,71,10,71, + 12,71,707,9,71,1,71,1,71,1,72,1,72,5,72,713,8,72,10,72,12,72,716,9,72, + 1,73,4,73,719,8,73,11,73,12,73,720,1,74,1,74,1,75,3,75,726,8,75,1,75,1, + 75,1,75,1,75,1,75,1,76,4,76,734,8,76,11,76,12,76,735,7,352,366,374,390, + 433,448,687,0,77,6,0,8,0,10,0,12,0,14,0,16,0,18,0,20,0,22,0,24,0,26,0, 28,0,30,0,32,0,34,0,36,0,38,0,40,0,42,0,44,0,46,0,48,0,50,0,52,0,54,0, 56,0,58,0,60,0,62,0,64,0,66,1,68,2,70,3,72,4,74,5,76,6,78,7,80,8,82,9, 84,10,86,11,88,12,90,13,92,14,94,15,96,16,98,17,100,0,102,0,104,18,106, @@ -198,7 +198,7 @@ static LUFileLexer() { 13,40,41,7,0,10,10,13,13,40,41,91,91,93,93,123,123,125,125,7,0,9,10,13, 13,32,32,34,34,39,39,44,44,59,59,2,0,34,34,39,39,6,0,9,10,13,13,34,34, 39,39,44,44,59,59,2,0,45,45,95,95,4,0,10,10,13,13,123,123,125,125,4,0, - 9,10,13,13,32,32,92,92,4,0,9,10,13,13,32,32,58,58,763,0,66,1,0,0,0,0,68, + 9,10,13,13,32,32,92,92,4,0,9,10,13,13,32,32,58,58,761,0,66,1,0,0,0,0,68, 1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0, 0,0,80,1,0,0,0,0,82,1,0,0,0,0,84,1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0,90, 1,0,0,0,0,92,1,0,0,0,0,94,1,0,0,0,0,96,1,0,0,0,0,98,1,0,0,0,1,100,1,0, @@ -215,16 +215,16 @@ static LUFileLexer() { 0,0,0,46,200,1,0,0,0,48,202,1,0,0,0,50,204,1,0,0,0,52,206,1,0,0,0,54,208, 1,0,0,0,56,210,1,0,0,0,58,212,1,0,0,0,60,214,1,0,0,0,62,216,1,0,0,0,64, 218,1,0,0,0,66,221,1,0,0,0,68,226,1,0,0,0,70,235,1,0,0,0,72,280,1,0,0, - 0,74,301,1,0,0,0,76,314,1,0,0,0,78,328,1,0,0,0,80,332,1,0,0,0,82,336,1, - 0,0,0,84,340,1,0,0,0,86,347,1,0,0,0,88,385,1,0,0,0,90,415,1,0,0,0,92,429, - 1,0,0,0,94,443,1,0,0,0,96,457,1,0,0,0,98,471,1,0,0,0,100,473,1,0,0,0,102, - 478,1,0,0,0,104,485,1,0,0,0,106,487,1,0,0,0,108,489,1,0,0,0,110,499,1, - 0,0,0,112,582,1,0,0,0,114,584,1,0,0,0,116,593,1,0,0,0,118,602,1,0,0,0, - 120,610,1,0,0,0,122,614,1,0,0,0,124,622,1,0,0,0,126,626,1,0,0,0,128,631, - 1,0,0,0,130,641,1,0,0,0,132,651,1,0,0,0,134,653,1,0,0,0,136,658,1,0,0, - 0,138,665,1,0,0,0,140,669,1,0,0,0,142,687,1,0,0,0,144,691,1,0,0,0,146, - 696,1,0,0,0,148,703,1,0,0,0,150,712,1,0,0,0,152,720,1,0,0,0,154,724,1, - 0,0,0,156,727,1,0,0,0,158,735,1,0,0,0,160,161,7,0,0,0,161,7,1,0,0,0,162, + 0,74,301,1,0,0,0,76,312,1,0,0,0,78,326,1,0,0,0,80,330,1,0,0,0,82,334,1, + 0,0,0,84,338,1,0,0,0,86,345,1,0,0,0,88,383,1,0,0,0,90,413,1,0,0,0,92,427, + 1,0,0,0,94,441,1,0,0,0,96,455,1,0,0,0,98,469,1,0,0,0,100,471,1,0,0,0,102, + 476,1,0,0,0,104,483,1,0,0,0,106,485,1,0,0,0,108,487,1,0,0,0,110,497,1, + 0,0,0,112,580,1,0,0,0,114,582,1,0,0,0,116,591,1,0,0,0,118,600,1,0,0,0, + 120,608,1,0,0,0,122,612,1,0,0,0,124,620,1,0,0,0,126,624,1,0,0,0,128,629, + 1,0,0,0,130,639,1,0,0,0,132,649,1,0,0,0,134,651,1,0,0,0,136,656,1,0,0, + 0,138,663,1,0,0,0,140,667,1,0,0,0,142,685,1,0,0,0,144,689,1,0,0,0,146, + 694,1,0,0,0,148,701,1,0,0,0,150,710,1,0,0,0,152,718,1,0,0,0,154,722,1, + 0,0,0,156,725,1,0,0,0,158,733,1,0,0,0,160,161,7,0,0,0,161,7,1,0,0,0,162, 163,7,1,0,0,163,9,1,0,0,0,164,165,7,2,0,0,165,11,1,0,0,0,166,167,7,3,0, 0,167,13,1,0,0,0,168,169,7,4,0,0,169,15,1,0,0,0,170,171,7,5,0,0,171,17, 1,0,0,0,172,173,7,6,0,0,173,19,1,0,0,0,174,175,7,7,0,0,175,21,1,0,0,0, @@ -261,123 +261,122 @@ static LUFileLexer() { 0,297,73,1,0,0,0,298,300,3,66,30,0,299,298,1,0,0,0,300,303,1,0,0,0,301, 299,1,0,0,0,301,302,1,0,0,0,302,304,1,0,0,0,303,301,1,0,0,0,304,308,5, 62,0,0,305,307,8,29,0,0,306,305,1,0,0,0,307,310,1,0,0,0,308,306,1,0,0, - 0,308,309,1,0,0,0,309,311,1,0,0,0,310,308,1,0,0,0,311,312,6,34,0,0,312, - 75,1,0,0,0,313,315,5,35,0,0,314,313,1,0,0,0,315,316,1,0,0,0,316,314,1, - 0,0,0,316,317,1,0,0,0,317,321,1,0,0,0,318,320,3,66,30,0,319,318,1,0,0, - 0,320,323,1,0,0,0,321,319,1,0,0,0,321,322,1,0,0,0,322,324,1,0,0,0,323, - 321,1,0,0,0,324,325,5,63,0,0,325,326,1,0,0,0,326,327,6,35,1,0,327,77,1, - 0,0,0,328,329,5,35,0,0,329,330,1,0,0,0,330,331,6,36,2,0,331,79,1,0,0,0, - 332,333,3,64,29,0,333,334,1,0,0,0,334,335,6,37,3,0,335,81,1,0,0,0,336, - 337,5,36,0,0,337,338,1,0,0,0,338,339,6,38,4,0,339,83,1,0,0,0,340,341,5, - 64,0,0,341,342,1,0,0,0,342,343,6,39,5,0,343,85,1,0,0,0,344,346,3,66,30, - 0,345,344,1,0,0,0,346,349,1,0,0,0,347,345,1,0,0,0,347,348,1,0,0,0,348, - 350,1,0,0,0,349,347,1,0,0,0,350,354,5,91,0,0,351,353,8,30,0,0,352,351, - 1,0,0,0,353,356,1,0,0,0,354,355,1,0,0,0,354,352,1,0,0,0,355,357,1,0,0, - 0,356,354,1,0,0,0,357,361,5,93,0,0,358,360,3,66,30,0,359,358,1,0,0,0,360, - 363,1,0,0,0,361,359,1,0,0,0,361,362,1,0,0,0,362,380,1,0,0,0,363,361,1, - 0,0,0,364,368,5,40,0,0,365,367,8,31,0,0,366,365,1,0,0,0,367,370,1,0,0, - 0,368,369,1,0,0,0,368,366,1,0,0,0,369,371,1,0,0,0,370,368,1,0,0,0,371, - 381,5,41,0,0,372,376,5,91,0,0,373,375,8,30,0,0,374,373,1,0,0,0,375,378, - 1,0,0,0,376,377,1,0,0,0,376,374,1,0,0,0,377,379,1,0,0,0,378,376,1,0,0, - 0,379,381,5,93,0,0,380,364,1,0,0,0,380,372,1,0,0,0,381,87,1,0,0,0,382, - 384,3,66,30,0,383,382,1,0,0,0,384,387,1,0,0,0,385,383,1,0,0,0,385,386, - 1,0,0,0,386,388,1,0,0,0,387,385,1,0,0,0,388,392,5,91,0,0,389,391,8,30, - 0,0,390,389,1,0,0,0,391,394,1,0,0,0,392,393,1,0,0,0,392,390,1,0,0,0,393, - 395,1,0,0,0,394,392,1,0,0,0,395,399,5,93,0,0,396,398,3,66,30,0,397,396, - 1,0,0,0,398,401,1,0,0,0,399,397,1,0,0,0,399,400,1,0,0,0,400,402,1,0,0, - 0,401,399,1,0,0,0,402,406,5,58,0,0,403,405,3,66,30,0,404,403,1,0,0,0,405, - 408,1,0,0,0,406,404,1,0,0,0,406,407,1,0,0,0,407,412,1,0,0,0,408,406,1, - 0,0,0,409,411,8,29,0,0,410,409,1,0,0,0,411,414,1,0,0,0,412,410,1,0,0,0, - 412,413,1,0,0,0,413,89,1,0,0,0,414,412,1,0,0,0,415,416,5,42,0,0,416,417, - 5,42,0,0,417,418,1,0,0,0,418,419,3,16,5,0,419,420,3,22,8,0,420,421,3,28, - 11,0,421,422,3,44,19,0,422,423,3,14,4,0,423,424,3,40,17,0,424,425,3,42, - 18,0,425,426,5,58,0,0,426,427,5,42,0,0,427,428,5,42,0,0,428,91,1,0,0,0, - 429,430,5,60,0,0,430,431,5,97,0,0,431,435,1,0,0,0,432,434,9,0,0,0,433, - 432,1,0,0,0,434,437,1,0,0,0,435,436,1,0,0,0,435,433,1,0,0,0,436,438,1, - 0,0,0,437,435,1,0,0,0,438,439,5,60,0,0,439,440,5,47,0,0,440,441,5,97,0, - 0,441,442,5,62,0,0,442,93,1,0,0,0,443,444,5,96,0,0,444,445,5,96,0,0,445, - 446,5,96,0,0,446,450,1,0,0,0,447,449,9,0,0,0,448,447,1,0,0,0,449,452,1, - 0,0,0,450,451,1,0,0,0,450,448,1,0,0,0,451,453,1,0,0,0,452,450,1,0,0,0, - 453,454,5,96,0,0,454,455,5,96,0,0,455,456,5,96,0,0,456,95,1,0,0,0,457, - 458,5,42,0,0,458,459,5,42,0,0,459,460,1,0,0,0,460,461,3,36,15,0,461,462, - 3,40,17,0,462,463,3,34,14,0,463,464,3,30,12,0,464,465,3,36,15,0,465,466, - 3,44,19,0,466,467,3,42,18,0,467,468,5,58,0,0,468,469,5,42,0,0,469,470, - 5,42,0,0,470,97,1,0,0,0,471,472,9,0,0,0,472,99,1,0,0,0,473,474,3,66,30, - 0,474,475,1,0,0,0,475,476,6,47,6,0,476,101,1,0,0,0,477,479,5,13,0,0,478, - 477,1,0,0,0,478,479,1,0,0,0,479,480,1,0,0,0,480,481,5,10,0,0,481,482,1, - 0,0,0,482,483,6,48,7,0,483,484,6,48,8,0,484,103,1,0,0,0,485,486,5,61,0, - 0,486,105,1,0,0,0,487,488,5,44,0,0,488,107,1,0,0,0,489,490,3,20,7,0,490, - 491,3,6,0,0,491,492,3,42,18,0,492,493,3,40,17,0,493,494,3,34,14,0,494, - 495,3,28,11,0,495,497,3,14,4,0,496,498,3,42,18,0,497,496,1,0,0,0,497,498, - 1,0,0,0,498,109,1,0,0,0,499,500,3,46,20,0,500,501,3,42,18,0,501,502,3, - 14,4,0,502,503,3,42,18,0,503,504,3,16,5,0,504,505,3,14,4,0,505,506,3,6, - 0,0,506,507,3,44,19,0,507,508,3,46,20,0,508,509,3,40,17,0,509,511,3,14, - 4,0,510,512,3,42,18,0,511,510,1,0,0,0,511,512,1,0,0,0,512,111,1,0,0,0, - 513,514,3,42,18,0,514,515,3,22,8,0,515,516,3,30,12,0,516,517,3,36,15,0, - 517,518,3,28,11,0,518,519,3,14,4,0,519,583,1,0,0,0,520,521,3,28,11,0,521, - 522,3,22,8,0,522,523,3,42,18,0,523,524,3,44,19,0,524,583,1,0,0,0,525,526, - 3,40,17,0,526,527,3,14,4,0,527,528,3,18,6,0,528,529,3,14,4,0,529,530,3, - 52,23,0,530,583,1,0,0,0,531,532,3,36,15,0,532,533,3,40,17,0,533,534,3, - 14,4,0,534,535,3,8,1,0,535,536,3,46,20,0,536,537,3,22,8,0,537,538,3,28, - 11,0,538,539,3,44,19,0,539,583,1,0,0,0,540,541,3,10,2,0,541,542,3,34,14, - 0,542,543,3,30,12,0,543,544,3,36,15,0,544,545,3,34,14,0,545,546,3,42,18, - 0,546,547,3,22,8,0,547,548,3,44,19,0,548,549,3,14,4,0,549,583,1,0,0,0, - 550,551,3,30,12,0,551,552,3,28,11,0,552,583,1,0,0,0,553,554,3,36,15,0, - 554,555,3,6,0,0,555,556,3,44,19,0,556,557,3,44,19,0,557,558,3,14,4,0,558, - 559,3,40,17,0,559,560,3,32,13,0,560,561,3,6,0,0,561,562,3,32,13,0,562, - 563,3,54,24,0,563,583,1,0,0,0,564,565,3,36,15,0,565,566,3,20,7,0,566,567, - 3,40,17,0,567,568,3,6,0,0,568,569,3,42,18,0,569,570,3,14,4,0,570,571,3, - 28,11,0,571,572,3,22,8,0,572,573,3,42,18,0,573,574,3,44,19,0,574,583,1, - 0,0,0,575,576,3,22,8,0,576,577,3,32,13,0,577,578,3,44,19,0,578,579,3,14, - 4,0,579,580,3,32,13,0,580,581,3,44,19,0,581,583,1,0,0,0,582,513,1,0,0, - 0,582,520,1,0,0,0,582,525,1,0,0,0,582,531,1,0,0,0,582,540,1,0,0,0,582, - 550,1,0,0,0,582,553,1,0,0,0,582,564,1,0,0,0,582,575,1,0,0,0,583,113,1, - 0,0,0,584,588,5,40,0,0,585,587,8,29,0,0,586,585,1,0,0,0,587,590,1,0,0, - 0,588,586,1,0,0,0,588,589,1,0,0,0,589,591,1,0,0,0,590,588,1,0,0,0,591, - 592,5,41,0,0,592,115,1,0,0,0,593,597,5,91,0,0,594,596,8,32,0,0,595,594, - 1,0,0,0,596,599,1,0,0,0,597,595,1,0,0,0,597,598,1,0,0,0,598,600,1,0,0, - 0,599,597,1,0,0,0,600,601,5,93,0,0,601,117,1,0,0,0,602,606,5,47,0,0,603, - 605,8,29,0,0,604,603,1,0,0,0,605,608,1,0,0,0,606,604,1,0,0,0,606,607,1, - 0,0,0,607,119,1,0,0,0,608,606,1,0,0,0,609,611,8,33,0,0,610,609,1,0,0,0, - 611,612,1,0,0,0,612,610,1,0,0,0,612,613,1,0,0,0,613,121,1,0,0,0,614,616, - 7,34,0,0,615,617,8,35,0,0,616,615,1,0,0,0,617,618,1,0,0,0,618,616,1,0, - 0,0,618,619,1,0,0,0,619,620,1,0,0,0,620,621,7,34,0,0,621,123,1,0,0,0,622, - 623,3,66,30,0,623,624,1,0,0,0,624,625,6,59,6,0,625,125,1,0,0,0,626,627, - 5,35,0,0,627,628,1,0,0,0,628,629,6,60,9,0,629,127,1,0,0,0,630,632,5,13, - 0,0,631,630,1,0,0,0,631,632,1,0,0,0,632,633,1,0,0,0,633,634,5,10,0,0,634, - 635,1,0,0,0,635,636,6,61,0,0,636,637,6,61,8,0,637,129,1,0,0,0,638,642, - 3,58,26,0,639,642,3,60,27,0,640,642,5,95,0,0,641,638,1,0,0,0,641,639,1, - 0,0,0,641,640,1,0,0,0,642,648,1,0,0,0,643,647,3,58,26,0,644,647,3,60,27, - 0,645,647,7,36,0,0,646,643,1,0,0,0,646,644,1,0,0,0,646,645,1,0,0,0,647, - 650,1,0,0,0,648,646,1,0,0,0,648,649,1,0,0,0,649,131,1,0,0,0,650,648,1, - 0,0,0,651,652,5,46,0,0,652,133,1,0,0,0,653,654,3,66,30,0,654,655,1,0,0, - 0,655,656,6,64,6,0,656,135,1,0,0,0,657,659,5,13,0,0,658,657,1,0,0,0,658, - 659,1,0,0,0,659,660,1,0,0,0,660,661,5,10,0,0,661,662,1,0,0,0,662,663,6, - 65,7,0,663,664,6,65,8,0,664,137,1,0,0,0,665,667,5,92,0,0,666,668,8,29, - 0,0,667,666,1,0,0,0,667,668,1,0,0,0,668,139,1,0,0,0,669,681,5,123,0,0, - 670,680,8,37,0,0,671,675,5,123,0,0,672,674,8,29,0,0,673,672,1,0,0,0,674, - 677,1,0,0,0,675,673,1,0,0,0,675,676,1,0,0,0,676,678,1,0,0,0,677,675,1, - 0,0,0,678,680,5,125,0,0,679,670,1,0,0,0,679,671,1,0,0,0,680,683,1,0,0, - 0,681,679,1,0,0,0,681,682,1,0,0,0,682,684,1,0,0,0,683,681,1,0,0,0,684, - 685,5,125,0,0,685,141,1,0,0,0,686,688,8,38,0,0,687,686,1,0,0,0,688,689, - 1,0,0,0,689,690,1,0,0,0,689,687,1,0,0,0,690,143,1,0,0,0,691,692,3,66,30, - 0,692,693,1,0,0,0,693,694,6,69,6,0,694,145,1,0,0,0,695,697,5,13,0,0,696, - 695,1,0,0,0,696,697,1,0,0,0,697,698,1,0,0,0,698,699,5,10,0,0,699,700,1, - 0,0,0,700,701,6,70,0,0,701,702,6,70,8,0,702,147,1,0,0,0,703,707,5,91,0, - 0,704,706,8,32,0,0,705,704,1,0,0,0,706,709,1,0,0,0,707,705,1,0,0,0,707, - 708,1,0,0,0,708,710,1,0,0,0,709,707,1,0,0,0,710,711,5,93,0,0,711,149,1, - 0,0,0,712,716,5,47,0,0,713,715,8,29,0,0,714,713,1,0,0,0,715,718,1,0,0, - 0,716,714,1,0,0,0,716,717,1,0,0,0,717,151,1,0,0,0,718,716,1,0,0,0,719, - 721,8,39,0,0,720,719,1,0,0,0,721,722,1,0,0,0,722,720,1,0,0,0,722,723,1, - 0,0,0,723,153,1,0,0,0,724,725,5,58,0,0,725,155,1,0,0,0,726,728,5,13,0, - 0,727,726,1,0,0,0,727,728,1,0,0,0,728,729,1,0,0,0,729,730,5,10,0,0,730, - 731,1,0,0,0,731,732,6,75,0,0,732,733,6,75,8,0,733,157,1,0,0,0,734,736, - 8,29,0,0,735,734,1,0,0,0,736,737,1,0,0,0,737,735,1,0,0,0,737,738,1,0,0, - 0,738,159,1,0,0,0,57,0,1,2,3,4,5,223,226,235,242,268,275,280,287,296,301, - 308,316,321,347,354,361,368,376,380,385,392,399,406,412,435,450,478,497, - 511,582,588,597,606,612,618,631,641,646,648,658,667,675,679,681,689,696, - 707,716,722,727,737,10,6,0,0,5,5,0,5,2,0,5,3,0,5,4,0,5,1,0,7,1,0,7,2,0, - 4,0,0,7,7,0 + 0,308,309,1,0,0,0,309,75,1,0,0,0,310,308,1,0,0,0,311,313,5,35,0,0,312, + 311,1,0,0,0,313,314,1,0,0,0,314,312,1,0,0,0,314,315,1,0,0,0,315,319,1, + 0,0,0,316,318,3,66,30,0,317,316,1,0,0,0,318,321,1,0,0,0,319,317,1,0,0, + 0,319,320,1,0,0,0,320,322,1,0,0,0,321,319,1,0,0,0,322,323,5,63,0,0,323, + 324,1,0,0,0,324,325,6,35,1,0,325,77,1,0,0,0,326,327,5,35,0,0,327,328,1, + 0,0,0,328,329,6,36,2,0,329,79,1,0,0,0,330,331,3,64,29,0,331,332,1,0,0, + 0,332,333,6,37,3,0,333,81,1,0,0,0,334,335,5,36,0,0,335,336,1,0,0,0,336, + 337,6,38,4,0,337,83,1,0,0,0,338,339,5,64,0,0,339,340,1,0,0,0,340,341,6, + 39,5,0,341,85,1,0,0,0,342,344,3,66,30,0,343,342,1,0,0,0,344,347,1,0,0, + 0,345,343,1,0,0,0,345,346,1,0,0,0,346,348,1,0,0,0,347,345,1,0,0,0,348, + 352,5,91,0,0,349,351,8,30,0,0,350,349,1,0,0,0,351,354,1,0,0,0,352,353, + 1,0,0,0,352,350,1,0,0,0,353,355,1,0,0,0,354,352,1,0,0,0,355,359,5,93,0, + 0,356,358,3,66,30,0,357,356,1,0,0,0,358,361,1,0,0,0,359,357,1,0,0,0,359, + 360,1,0,0,0,360,378,1,0,0,0,361,359,1,0,0,0,362,366,5,40,0,0,363,365,8, + 31,0,0,364,363,1,0,0,0,365,368,1,0,0,0,366,367,1,0,0,0,366,364,1,0,0,0, + 367,369,1,0,0,0,368,366,1,0,0,0,369,379,5,41,0,0,370,374,5,91,0,0,371, + 373,8,30,0,0,372,371,1,0,0,0,373,376,1,0,0,0,374,375,1,0,0,0,374,372,1, + 0,0,0,375,377,1,0,0,0,376,374,1,0,0,0,377,379,5,93,0,0,378,362,1,0,0,0, + 378,370,1,0,0,0,379,87,1,0,0,0,380,382,3,66,30,0,381,380,1,0,0,0,382,385, + 1,0,0,0,383,381,1,0,0,0,383,384,1,0,0,0,384,386,1,0,0,0,385,383,1,0,0, + 0,386,390,5,91,0,0,387,389,8,30,0,0,388,387,1,0,0,0,389,392,1,0,0,0,390, + 391,1,0,0,0,390,388,1,0,0,0,391,393,1,0,0,0,392,390,1,0,0,0,393,397,5, + 93,0,0,394,396,3,66,30,0,395,394,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0, + 0,397,398,1,0,0,0,398,400,1,0,0,0,399,397,1,0,0,0,400,404,5,58,0,0,401, + 403,3,66,30,0,402,401,1,0,0,0,403,406,1,0,0,0,404,402,1,0,0,0,404,405, + 1,0,0,0,405,410,1,0,0,0,406,404,1,0,0,0,407,409,8,29,0,0,408,407,1,0,0, + 0,409,412,1,0,0,0,410,408,1,0,0,0,410,411,1,0,0,0,411,89,1,0,0,0,412,410, + 1,0,0,0,413,414,5,42,0,0,414,415,5,42,0,0,415,416,1,0,0,0,416,417,3,16, + 5,0,417,418,3,22,8,0,418,419,3,28,11,0,419,420,3,44,19,0,420,421,3,14, + 4,0,421,422,3,40,17,0,422,423,3,42,18,0,423,424,5,58,0,0,424,425,5,42, + 0,0,425,426,5,42,0,0,426,91,1,0,0,0,427,428,5,60,0,0,428,429,5,97,0,0, + 429,433,1,0,0,0,430,432,9,0,0,0,431,430,1,0,0,0,432,435,1,0,0,0,433,434, + 1,0,0,0,433,431,1,0,0,0,434,436,1,0,0,0,435,433,1,0,0,0,436,437,5,60,0, + 0,437,438,5,47,0,0,438,439,5,97,0,0,439,440,5,62,0,0,440,93,1,0,0,0,441, + 442,5,96,0,0,442,443,5,96,0,0,443,444,5,96,0,0,444,448,1,0,0,0,445,447, + 9,0,0,0,446,445,1,0,0,0,447,450,1,0,0,0,448,449,1,0,0,0,448,446,1,0,0, + 0,449,451,1,0,0,0,450,448,1,0,0,0,451,452,5,96,0,0,452,453,5,96,0,0,453, + 454,5,96,0,0,454,95,1,0,0,0,455,456,5,42,0,0,456,457,5,42,0,0,457,458, + 1,0,0,0,458,459,3,36,15,0,459,460,3,40,17,0,460,461,3,34,14,0,461,462, + 3,30,12,0,462,463,3,36,15,0,463,464,3,44,19,0,464,465,3,42,18,0,465,466, + 5,58,0,0,466,467,5,42,0,0,467,468,5,42,0,0,468,97,1,0,0,0,469,470,9,0, + 0,0,470,99,1,0,0,0,471,472,3,66,30,0,472,473,1,0,0,0,473,474,6,47,6,0, + 474,101,1,0,0,0,475,477,5,13,0,0,476,475,1,0,0,0,476,477,1,0,0,0,477,478, + 1,0,0,0,478,479,5,10,0,0,479,480,1,0,0,0,480,481,6,48,7,0,481,482,6,48, + 8,0,482,103,1,0,0,0,483,484,5,61,0,0,484,105,1,0,0,0,485,486,5,44,0,0, + 486,107,1,0,0,0,487,488,3,20,7,0,488,489,3,6,0,0,489,490,3,42,18,0,490, + 491,3,40,17,0,491,492,3,34,14,0,492,493,3,28,11,0,493,495,3,14,4,0,494, + 496,3,42,18,0,495,494,1,0,0,0,495,496,1,0,0,0,496,109,1,0,0,0,497,498, + 3,46,20,0,498,499,3,42,18,0,499,500,3,14,4,0,500,501,3,42,18,0,501,502, + 3,16,5,0,502,503,3,14,4,0,503,504,3,6,0,0,504,505,3,44,19,0,505,506,3, + 46,20,0,506,507,3,40,17,0,507,509,3,14,4,0,508,510,3,42,18,0,509,508,1, + 0,0,0,509,510,1,0,0,0,510,111,1,0,0,0,511,512,3,42,18,0,512,513,3,22,8, + 0,513,514,3,30,12,0,514,515,3,36,15,0,515,516,3,28,11,0,516,517,3,14,4, + 0,517,581,1,0,0,0,518,519,3,28,11,0,519,520,3,22,8,0,520,521,3,42,18,0, + 521,522,3,44,19,0,522,581,1,0,0,0,523,524,3,40,17,0,524,525,3,14,4,0,525, + 526,3,18,6,0,526,527,3,14,4,0,527,528,3,52,23,0,528,581,1,0,0,0,529,530, + 3,36,15,0,530,531,3,40,17,0,531,532,3,14,4,0,532,533,3,8,1,0,533,534,3, + 46,20,0,534,535,3,22,8,0,535,536,3,28,11,0,536,537,3,44,19,0,537,581,1, + 0,0,0,538,539,3,10,2,0,539,540,3,34,14,0,540,541,3,30,12,0,541,542,3,36, + 15,0,542,543,3,34,14,0,543,544,3,42,18,0,544,545,3,22,8,0,545,546,3,44, + 19,0,546,547,3,14,4,0,547,581,1,0,0,0,548,549,3,30,12,0,549,550,3,28,11, + 0,550,581,1,0,0,0,551,552,3,36,15,0,552,553,3,6,0,0,553,554,3,44,19,0, + 554,555,3,44,19,0,555,556,3,14,4,0,556,557,3,40,17,0,557,558,3,32,13,0, + 558,559,3,6,0,0,559,560,3,32,13,0,560,561,3,54,24,0,561,581,1,0,0,0,562, + 563,3,36,15,0,563,564,3,20,7,0,564,565,3,40,17,0,565,566,3,6,0,0,566,567, + 3,42,18,0,567,568,3,14,4,0,568,569,3,28,11,0,569,570,3,22,8,0,570,571, + 3,42,18,0,571,572,3,44,19,0,572,581,1,0,0,0,573,574,3,22,8,0,574,575,3, + 32,13,0,575,576,3,44,19,0,576,577,3,14,4,0,577,578,3,32,13,0,578,579,3, + 44,19,0,579,581,1,0,0,0,580,511,1,0,0,0,580,518,1,0,0,0,580,523,1,0,0, + 0,580,529,1,0,0,0,580,538,1,0,0,0,580,548,1,0,0,0,580,551,1,0,0,0,580, + 562,1,0,0,0,580,573,1,0,0,0,581,113,1,0,0,0,582,586,5,40,0,0,583,585,8, + 29,0,0,584,583,1,0,0,0,585,588,1,0,0,0,586,584,1,0,0,0,586,587,1,0,0,0, + 587,589,1,0,0,0,588,586,1,0,0,0,589,590,5,41,0,0,590,115,1,0,0,0,591,595, + 5,91,0,0,592,594,8,32,0,0,593,592,1,0,0,0,594,597,1,0,0,0,595,593,1,0, + 0,0,595,596,1,0,0,0,596,598,1,0,0,0,597,595,1,0,0,0,598,599,5,93,0,0,599, + 117,1,0,0,0,600,604,5,47,0,0,601,603,8,29,0,0,602,601,1,0,0,0,603,606, + 1,0,0,0,604,602,1,0,0,0,604,605,1,0,0,0,605,119,1,0,0,0,606,604,1,0,0, + 0,607,609,8,33,0,0,608,607,1,0,0,0,609,610,1,0,0,0,610,608,1,0,0,0,610, + 611,1,0,0,0,611,121,1,0,0,0,612,614,7,34,0,0,613,615,8,35,0,0,614,613, + 1,0,0,0,615,616,1,0,0,0,616,614,1,0,0,0,616,617,1,0,0,0,617,618,1,0,0, + 0,618,619,7,34,0,0,619,123,1,0,0,0,620,621,3,66,30,0,621,622,1,0,0,0,622, + 623,6,59,6,0,623,125,1,0,0,0,624,625,5,35,0,0,625,626,1,0,0,0,626,627, + 6,60,9,0,627,127,1,0,0,0,628,630,5,13,0,0,629,628,1,0,0,0,629,630,1,0, + 0,0,630,631,1,0,0,0,631,632,5,10,0,0,632,633,1,0,0,0,633,634,6,61,0,0, + 634,635,6,61,8,0,635,129,1,0,0,0,636,640,3,58,26,0,637,640,3,60,27,0,638, + 640,5,95,0,0,639,636,1,0,0,0,639,637,1,0,0,0,639,638,1,0,0,0,640,646,1, + 0,0,0,641,645,3,58,26,0,642,645,3,60,27,0,643,645,7,36,0,0,644,641,1,0, + 0,0,644,642,1,0,0,0,644,643,1,0,0,0,645,648,1,0,0,0,646,644,1,0,0,0,646, + 647,1,0,0,0,647,131,1,0,0,0,648,646,1,0,0,0,649,650,5,46,0,0,650,133,1, + 0,0,0,651,652,3,66,30,0,652,653,1,0,0,0,653,654,6,64,6,0,654,135,1,0,0, + 0,655,657,5,13,0,0,656,655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0,0,658, + 659,5,10,0,0,659,660,1,0,0,0,660,661,6,65,7,0,661,662,6,65,8,0,662,137, + 1,0,0,0,663,665,5,92,0,0,664,666,8,29,0,0,665,664,1,0,0,0,665,666,1,0, + 0,0,666,139,1,0,0,0,667,679,5,123,0,0,668,678,8,37,0,0,669,673,5,123,0, + 0,670,672,8,29,0,0,671,670,1,0,0,0,672,675,1,0,0,0,673,671,1,0,0,0,673, + 674,1,0,0,0,674,676,1,0,0,0,675,673,1,0,0,0,676,678,5,125,0,0,677,668, + 1,0,0,0,677,669,1,0,0,0,678,681,1,0,0,0,679,677,1,0,0,0,679,680,1,0,0, + 0,680,682,1,0,0,0,681,679,1,0,0,0,682,683,5,125,0,0,683,141,1,0,0,0,684, + 686,8,38,0,0,685,684,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0,687,685,1, + 0,0,0,688,143,1,0,0,0,689,690,3,66,30,0,690,691,1,0,0,0,691,692,6,69,6, + 0,692,145,1,0,0,0,693,695,5,13,0,0,694,693,1,0,0,0,694,695,1,0,0,0,695, + 696,1,0,0,0,696,697,5,10,0,0,697,698,1,0,0,0,698,699,6,70,0,0,699,700, + 6,70,8,0,700,147,1,0,0,0,701,705,5,91,0,0,702,704,8,32,0,0,703,702,1,0, + 0,0,704,707,1,0,0,0,705,703,1,0,0,0,705,706,1,0,0,0,706,708,1,0,0,0,707, + 705,1,0,0,0,708,709,5,93,0,0,709,149,1,0,0,0,710,714,5,47,0,0,711,713, + 8,29,0,0,712,711,1,0,0,0,713,716,1,0,0,0,714,712,1,0,0,0,714,715,1,0,0, + 0,715,151,1,0,0,0,716,714,1,0,0,0,717,719,8,39,0,0,718,717,1,0,0,0,719, + 720,1,0,0,0,720,718,1,0,0,0,720,721,1,0,0,0,721,153,1,0,0,0,722,723,5, + 58,0,0,723,155,1,0,0,0,724,726,5,13,0,0,725,724,1,0,0,0,725,726,1,0,0, + 0,726,727,1,0,0,0,727,728,5,10,0,0,728,729,1,0,0,0,729,730,6,75,0,0,730, + 731,6,75,8,0,731,157,1,0,0,0,732,734,8,29,0,0,733,732,1,0,0,0,734,735, + 1,0,0,0,735,733,1,0,0,0,735,736,1,0,0,0,736,159,1,0,0,0,57,0,1,2,3,4,5, + 223,226,235,242,268,275,280,287,296,301,308,314,319,345,352,359,366,374, + 378,383,390,397,404,410,433,448,476,495,509,580,586,595,604,610,616,629, + 639,644,646,656,665,673,677,679,687,694,705,714,720,725,735,10,6,0,0,5, + 5,0,5,2,0,5,3,0,5,4,0,5,1,0,7,1,0,7,2,0,4,0,0,7,7,0 }; public static readonly ATN _ATN = diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp index d87ad2bbe8..69f0f095f6 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp @@ -176,4 +176,4 @@ ENTITY_MODE QNA_MODE atn: -[4, 0, 40, 739, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 4, 30, 222, 8, 30, 11, 30, 12, 30, 223, 1, 31, 3, 31, 227, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 5, 32, 234, 8, 32, 10, 32, 12, 32, 237, 9, 32, 1, 32, 1, 32, 5, 32, 241, 8, 32, 10, 32, 12, 32, 244, 9, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 267, 8, 32, 10, 32, 12, 32, 270, 9, 32, 1, 32, 1, 32, 4, 32, 274, 8, 32, 11, 32, 12, 32, 275, 1, 33, 5, 33, 279, 8, 33, 10, 33, 12, 33, 282, 9, 33, 1, 33, 1, 33, 5, 33, 286, 8, 33, 10, 33, 12, 33, 289, 9, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 295, 8, 33, 11, 33, 12, 33, 296, 1, 34, 5, 34, 300, 8, 34, 10, 34, 12, 34, 303, 9, 34, 1, 34, 1, 34, 5, 34, 307, 8, 34, 10, 34, 12, 34, 310, 9, 34, 1, 34, 1, 34, 1, 35, 4, 35, 315, 8, 35, 11, 35, 12, 35, 316, 1, 35, 5, 35, 320, 8, 35, 10, 35, 12, 35, 323, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 5, 40, 346, 8, 40, 10, 40, 12, 40, 349, 9, 40, 1, 40, 1, 40, 5, 40, 353, 8, 40, 10, 40, 12, 40, 356, 9, 40, 1, 40, 1, 40, 5, 40, 360, 8, 40, 10, 40, 12, 40, 363, 9, 40, 1, 40, 1, 40, 5, 40, 367, 8, 40, 10, 40, 12, 40, 370, 9, 40, 1, 40, 1, 40, 1, 40, 5, 40, 375, 8, 40, 10, 40, 12, 40, 378, 9, 40, 1, 40, 3, 40, 381, 8, 40, 1, 41, 5, 41, 384, 8, 41, 10, 41, 12, 41, 387, 9, 41, 1, 41, 1, 41, 5, 41, 391, 8, 41, 10, 41, 12, 41, 394, 9, 41, 1, 41, 1, 41, 5, 41, 398, 8, 41, 10, 41, 12, 41, 401, 9, 41, 1, 41, 1, 41, 5, 41, 405, 8, 41, 10, 41, 12, 41, 408, 9, 41, 1, 41, 5, 41, 411, 8, 41, 10, 41, 12, 41, 414, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 434, 8, 43, 10, 43, 12, 43, 437, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 449, 8, 44, 10, 44, 12, 44, 452, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 3, 48, 479, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 498, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 512, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 583, 8, 53, 1, 54, 1, 54, 5, 54, 587, 8, 54, 10, 54, 12, 54, 590, 9, 54, 1, 54, 1, 54, 1, 55, 1, 55, 5, 55, 596, 8, 55, 10, 55, 12, 55, 599, 9, 55, 1, 55, 1, 55, 1, 56, 1, 56, 5, 56, 605, 8, 56, 10, 56, 12, 56, 608, 9, 56, 1, 57, 4, 57, 611, 8, 57, 11, 57, 12, 57, 612, 1, 58, 1, 58, 4, 58, 617, 8, 58, 11, 58, 12, 58, 618, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 3, 61, 632, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 3, 62, 642, 8, 62, 1, 62, 1, 62, 1, 62, 5, 62, 647, 8, 62, 10, 62, 12, 62, 650, 9, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 3, 65, 659, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 668, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 674, 8, 67, 10, 67, 12, 67, 677, 9, 67, 1, 67, 5, 67, 680, 8, 67, 10, 67, 12, 67, 683, 9, 67, 1, 67, 1, 67, 1, 68, 4, 68, 688, 8, 68, 11, 68, 12, 68, 689, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 3, 70, 697, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 5, 71, 706, 8, 71, 10, 71, 12, 71, 709, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 5, 72, 715, 8, 72, 10, 72, 12, 72, 718, 9, 72, 1, 73, 4, 73, 721, 8, 73, 11, 73, 12, 73, 722, 1, 74, 1, 74, 1, 75, 3, 75, 728, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 4, 76, 736, 8, 76, 11, 76, 12, 76, 737, 7, 354, 368, 376, 392, 435, 450, 689, 0, 77, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20, 0, 22, 0, 24, 0, 26, 0, 28, 0, 30, 0, 32, 0, 34, 0, 36, 0, 38, 0, 40, 0, 42, 0, 44, 0, 46, 0, 48, 0, 50, 0, 52, 0, 54, 0, 56, 0, 58, 0, 60, 0, 62, 0, 64, 0, 66, 1, 68, 2, 70, 3, 72, 4, 74, 5, 76, 6, 78, 7, 80, 8, 82, 9, 84, 10, 86, 11, 88, 12, 90, 13, 92, 14, 94, 15, 96, 16, 98, 17, 100, 0, 102, 0, 104, 18, 106, 19, 108, 20, 110, 21, 112, 22, 114, 23, 116, 24, 118, 25, 120, 26, 122, 27, 124, 0, 126, 0, 128, 28, 130, 29, 132, 30, 134, 0, 136, 0, 138, 31, 140, 32, 142, 33, 144, 0, 146, 34, 148, 35, 150, 36, 152, 37, 154, 38, 156, 39, 158, 40, 6, 0, 1, 2, 3, 4, 5, 40, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 4, 0, 9, 9, 32, 32, 160, 160, 65279, 65279, 2, 0, 42, 43, 45, 45, 2, 0, 10, 10, 13, 13, 4, 0, 10, 10, 13, 13, 91, 91, 93, 93, 3, 0, 10, 10, 13, 13, 40, 41, 7, 0, 10, 10, 13, 13, 40, 41, 91, 91, 93, 93, 123, 123, 125, 125, 7, 0, 9, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 34, 34, 39, 39, 6, 0, 9, 10, 13, 13, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 45, 45, 95, 95, 4, 0, 10, 10, 13, 13, 123, 123, 125, 125, 4, 0, 9, 10, 13, 13, 32, 32, 92, 92, 4, 0, 9, 10, 13, 13, 32, 32, 58, 58, 763, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 1, 100, 1, 0, 0, 0, 1, 102, 1, 0, 0, 0, 1, 104, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 1, 108, 1, 0, 0, 0, 1, 110, 1, 0, 0, 0, 1, 112, 1, 0, 0, 0, 1, 114, 1, 0, 0, 0, 1, 116, 1, 0, 0, 0, 1, 118, 1, 0, 0, 0, 1, 120, 1, 0, 0, 0, 1, 122, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 2, 126, 1, 0, 0, 0, 2, 128, 1, 0, 0, 0, 2, 130, 1, 0, 0, 0, 2, 132, 1, 0, 0, 0, 3, 134, 1, 0, 0, 0, 3, 136, 1, 0, 0, 0, 3, 138, 1, 0, 0, 0, 3, 140, 1, 0, 0, 0, 3, 142, 1, 0, 0, 0, 4, 144, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 4, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 5, 156, 1, 0, 0, 0, 5, 158, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 164, 1, 0, 0, 0, 12, 166, 1, 0, 0, 0, 14, 168, 1, 0, 0, 0, 16, 170, 1, 0, 0, 0, 18, 172, 1, 0, 0, 0, 20, 174, 1, 0, 0, 0, 22, 176, 1, 0, 0, 0, 24, 178, 1, 0, 0, 0, 26, 180, 1, 0, 0, 0, 28, 182, 1, 0, 0, 0, 30, 184, 1, 0, 0, 0, 32, 186, 1, 0, 0, 0, 34, 188, 1, 0, 0, 0, 36, 190, 1, 0, 0, 0, 38, 192, 1, 0, 0, 0, 40, 194, 1, 0, 0, 0, 42, 196, 1, 0, 0, 0, 44, 198, 1, 0, 0, 0, 46, 200, 1, 0, 0, 0, 48, 202, 1, 0, 0, 0, 50, 204, 1, 0, 0, 0, 52, 206, 1, 0, 0, 0, 54, 208, 1, 0, 0, 0, 56, 210, 1, 0, 0, 0, 58, 212, 1, 0, 0, 0, 60, 214, 1, 0, 0, 0, 62, 216, 1, 0, 0, 0, 64, 218, 1, 0, 0, 0, 66, 221, 1, 0, 0, 0, 68, 226, 1, 0, 0, 0, 70, 235, 1, 0, 0, 0, 72, 280, 1, 0, 0, 0, 74, 301, 1, 0, 0, 0, 76, 314, 1, 0, 0, 0, 78, 328, 1, 0, 0, 0, 80, 332, 1, 0, 0, 0, 82, 336, 1, 0, 0, 0, 84, 340, 1, 0, 0, 0, 86, 347, 1, 0, 0, 0, 88, 385, 1, 0, 0, 0, 90, 415, 1, 0, 0, 0, 92, 429, 1, 0, 0, 0, 94, 443, 1, 0, 0, 0, 96, 457, 1, 0, 0, 0, 98, 471, 1, 0, 0, 0, 100, 473, 1, 0, 0, 0, 102, 478, 1, 0, 0, 0, 104, 485, 1, 0, 0, 0, 106, 487, 1, 0, 0, 0, 108, 489, 1, 0, 0, 0, 110, 499, 1, 0, 0, 0, 112, 582, 1, 0, 0, 0, 114, 584, 1, 0, 0, 0, 116, 593, 1, 0, 0, 0, 118, 602, 1, 0, 0, 0, 120, 610, 1, 0, 0, 0, 122, 614, 1, 0, 0, 0, 124, 622, 1, 0, 0, 0, 126, 626, 1, 0, 0, 0, 128, 631, 1, 0, 0, 0, 130, 641, 1, 0, 0, 0, 132, 651, 1, 0, 0, 0, 134, 653, 1, 0, 0, 0, 136, 658, 1, 0, 0, 0, 138, 665, 1, 0, 0, 0, 140, 669, 1, 0, 0, 0, 142, 687, 1, 0, 0, 0, 144, 691, 1, 0, 0, 0, 146, 696, 1, 0, 0, 0, 148, 703, 1, 0, 0, 0, 150, 712, 1, 0, 0, 0, 152, 720, 1, 0, 0, 0, 154, 724, 1, 0, 0, 0, 156, 727, 1, 0, 0, 0, 158, 735, 1, 0, 0, 0, 160, 161, 7, 0, 0, 0, 161, 7, 1, 0, 0, 0, 162, 163, 7, 1, 0, 0, 163, 9, 1, 0, 0, 0, 164, 165, 7, 2, 0, 0, 165, 11, 1, 0, 0, 0, 166, 167, 7, 3, 0, 0, 167, 13, 1, 0, 0, 0, 168, 169, 7, 4, 0, 0, 169, 15, 1, 0, 0, 0, 170, 171, 7, 5, 0, 0, 171, 17, 1, 0, 0, 0, 172, 173, 7, 6, 0, 0, 173, 19, 1, 0, 0, 0, 174, 175, 7, 7, 0, 0, 175, 21, 1, 0, 0, 0, 176, 177, 7, 8, 0, 0, 177, 23, 1, 0, 0, 0, 178, 179, 7, 9, 0, 0, 179, 25, 1, 0, 0, 0, 180, 181, 7, 10, 0, 0, 181, 27, 1, 0, 0, 0, 182, 183, 7, 11, 0, 0, 183, 29, 1, 0, 0, 0, 184, 185, 7, 12, 0, 0, 185, 31, 1, 0, 0, 0, 186, 187, 7, 13, 0, 0, 187, 33, 1, 0, 0, 0, 188, 189, 7, 14, 0, 0, 189, 35, 1, 0, 0, 0, 190, 191, 7, 15, 0, 0, 191, 37, 1, 0, 0, 0, 192, 193, 7, 16, 0, 0, 193, 39, 1, 0, 0, 0, 194, 195, 7, 17, 0, 0, 195, 41, 1, 0, 0, 0, 196, 197, 7, 18, 0, 0, 197, 43, 1, 0, 0, 0, 198, 199, 7, 19, 0, 0, 199, 45, 1, 0, 0, 0, 200, 201, 7, 20, 0, 0, 201, 47, 1, 0, 0, 0, 202, 203, 7, 21, 0, 0, 203, 49, 1, 0, 0, 0, 204, 205, 7, 22, 0, 0, 205, 51, 1, 0, 0, 0, 206, 207, 7, 23, 0, 0, 207, 53, 1, 0, 0, 0, 208, 209, 7, 24, 0, 0, 209, 55, 1, 0, 0, 0, 210, 211, 7, 25, 0, 0, 211, 57, 1, 0, 0, 0, 212, 213, 7, 26, 0, 0, 213, 59, 1, 0, 0, 0, 214, 215, 2, 48, 57, 0, 215, 61, 1, 0, 0, 0, 216, 217, 7, 27, 0, 0, 217, 63, 1, 0, 0, 0, 218, 219, 7, 28, 0, 0, 219, 65, 1, 0, 0, 0, 220, 222, 3, 62, 28, 0, 221, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 67, 1, 0, 0, 0, 225, 227, 5, 13, 0, 0, 226, 225, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 229, 5, 10, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 31, 0, 0, 231, 69, 1, 0, 0, 0, 232, 234, 3, 66, 30, 0, 233, 232, 1, 0, 0, 0, 234, 237, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 238, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 238, 242, 5, 62, 0, 0, 239, 241, 3, 66, 30, 0, 240, 239, 1, 0, 0, 0, 241, 244, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 245, 246, 5, 33, 0, 0, 246, 247, 5, 35, 0, 0, 247, 248, 5, 32, 0, 0, 248, 249, 5, 64, 0, 0, 249, 250, 5, 113, 0, 0, 250, 251, 5, 110, 0, 0, 251, 252, 5, 97, 0, 0, 252, 253, 5, 46, 0, 0, 253, 254, 5, 112, 0, 0, 254, 255, 5, 97, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 114, 0, 0, 257, 258, 5, 46, 0, 0, 258, 259, 5, 115, 0, 0, 259, 260, 5, 111, 0, 0, 260, 261, 5, 117, 0, 0, 261, 262, 5, 114, 0, 0, 262, 263, 5, 99, 0, 0, 263, 264, 5, 101, 0, 0, 264, 268, 1, 0, 0, 0, 265, 267, 3, 66, 30, 0, 266, 265, 1, 0, 0, 0, 267, 270, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 271, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 271, 273, 5, 61, 0, 0, 272, 274, 8, 29, 0, 0, 273, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 71, 1, 0, 0, 0, 277, 279, 3, 66, 30, 0, 278, 277, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 283, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 283, 287, 5, 62, 0, 0, 284, 286, 3, 66, 30, 0, 285, 284, 1, 0, 0, 0, 286, 289, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 290, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 290, 291, 5, 33, 0, 0, 291, 292, 5, 35, 0, 0, 292, 294, 1, 0, 0, 0, 293, 295, 8, 29, 0, 0, 294, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 73, 1, 0, 0, 0, 298, 300, 3, 66, 30, 0, 299, 298, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 304, 308, 5, 62, 0, 0, 305, 307, 8, 29, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 312, 6, 34, 0, 0, 312, 75, 1, 0, 0, 0, 313, 315, 5, 35, 0, 0, 314, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 321, 1, 0, 0, 0, 318, 320, 3, 66, 30, 0, 319, 318, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 324, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, 325, 5, 63, 0, 0, 325, 326, 1, 0, 0, 0, 326, 327, 6, 35, 1, 0, 327, 77, 1, 0, 0, 0, 328, 329, 5, 35, 0, 0, 329, 330, 1, 0, 0, 0, 330, 331, 6, 36, 2, 0, 331, 79, 1, 0, 0, 0, 332, 333, 3, 64, 29, 0, 333, 334, 1, 0, 0, 0, 334, 335, 6, 37, 3, 0, 335, 81, 1, 0, 0, 0, 336, 337, 5, 36, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 6, 38, 4, 0, 339, 83, 1, 0, 0, 0, 340, 341, 5, 64, 0, 0, 341, 342, 1, 0, 0, 0, 342, 343, 6, 39, 5, 0, 343, 85, 1, 0, 0, 0, 344, 346, 3, 66, 30, 0, 345, 344, 1, 0, 0, 0, 346, 349, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 350, 1, 0, 0, 0, 349, 347, 1, 0, 0, 0, 350, 354, 5, 91, 0, 0, 351, 353, 8, 30, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 361, 5, 93, 0, 0, 358, 360, 3, 66, 30, 0, 359, 358, 1, 0, 0, 0, 360, 363, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 380, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 364, 368, 5, 40, 0, 0, 365, 367, 8, 31, 0, 0, 366, 365, 1, 0, 0, 0, 367, 370, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 371, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 371, 381, 5, 41, 0, 0, 372, 376, 5, 91, 0, 0, 373, 375, 8, 30, 0, 0, 374, 373, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 379, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 379, 381, 5, 93, 0, 0, 380, 364, 1, 0, 0, 0, 380, 372, 1, 0, 0, 0, 381, 87, 1, 0, 0, 0, 382, 384, 3, 66, 30, 0, 383, 382, 1, 0, 0, 0, 384, 387, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 388, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 388, 392, 5, 91, 0, 0, 389, 391, 8, 30, 0, 0, 390, 389, 1, 0, 0, 0, 391, 394, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 395, 399, 5, 93, 0, 0, 396, 398, 3, 66, 30, 0, 397, 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 402, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402, 406, 5, 58, 0, 0, 403, 405, 3, 66, 30, 0, 404, 403, 1, 0, 0, 0, 405, 408, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 412, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 409, 411, 8, 29, 0, 0, 410, 409, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 89, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 5, 42, 0, 0, 416, 417, 5, 42, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 3, 16, 5, 0, 419, 420, 3, 22, 8, 0, 420, 421, 3, 28, 11, 0, 421, 422, 3, 44, 19, 0, 422, 423, 3, 14, 4, 0, 423, 424, 3, 40, 17, 0, 424, 425, 3, 42, 18, 0, 425, 426, 5, 58, 0, 0, 426, 427, 5, 42, 0, 0, 427, 428, 5, 42, 0, 0, 428, 91, 1, 0, 0, 0, 429, 430, 5, 60, 0, 0, 430, 431, 5, 97, 0, 0, 431, 435, 1, 0, 0, 0, 432, 434, 9, 0, 0, 0, 433, 432, 1, 0, 0, 0, 434, 437, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 435, 1, 0, 0, 0, 438, 439, 5, 60, 0, 0, 439, 440, 5, 47, 0, 0, 440, 441, 5, 97, 0, 0, 441, 442, 5, 62, 0, 0, 442, 93, 1, 0, 0, 0, 443, 444, 5, 96, 0, 0, 444, 445, 5, 96, 0, 0, 445, 446, 5, 96, 0, 0, 446, 450, 1, 0, 0, 0, 447, 449, 9, 0, 0, 0, 448, 447, 1, 0, 0, 0, 449, 452, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 451, 453, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 453, 454, 5, 96, 0, 0, 454, 455, 5, 96, 0, 0, 455, 456, 5, 96, 0, 0, 456, 95, 1, 0, 0, 0, 457, 458, 5, 42, 0, 0, 458, 459, 5, 42, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 3, 36, 15, 0, 461, 462, 3, 40, 17, 0, 462, 463, 3, 34, 14, 0, 463, 464, 3, 30, 12, 0, 464, 465, 3, 36, 15, 0, 465, 466, 3, 44, 19, 0, 466, 467, 3, 42, 18, 0, 467, 468, 5, 58, 0, 0, 468, 469, 5, 42, 0, 0, 469, 470, 5, 42, 0, 0, 470, 97, 1, 0, 0, 0, 471, 472, 9, 0, 0, 0, 472, 99, 1, 0, 0, 0, 473, 474, 3, 66, 30, 0, 474, 475, 1, 0, 0, 0, 475, 476, 6, 47, 6, 0, 476, 101, 1, 0, 0, 0, 477, 479, 5, 13, 0, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 5, 10, 0, 0, 481, 482, 1, 0, 0, 0, 482, 483, 6, 48, 7, 0, 483, 484, 6, 48, 8, 0, 484, 103, 1, 0, 0, 0, 485, 486, 5, 61, 0, 0, 486, 105, 1, 0, 0, 0, 487, 488, 5, 44, 0, 0, 488, 107, 1, 0, 0, 0, 489, 490, 3, 20, 7, 0, 490, 491, 3, 6, 0, 0, 491, 492, 3, 42, 18, 0, 492, 493, 3, 40, 17, 0, 493, 494, 3, 34, 14, 0, 494, 495, 3, 28, 11, 0, 495, 497, 3, 14, 4, 0, 496, 498, 3, 42, 18, 0, 497, 496, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 109, 1, 0, 0, 0, 499, 500, 3, 46, 20, 0, 500, 501, 3, 42, 18, 0, 501, 502, 3, 14, 4, 0, 502, 503, 3, 42, 18, 0, 503, 504, 3, 16, 5, 0, 504, 505, 3, 14, 4, 0, 505, 506, 3, 6, 0, 0, 506, 507, 3, 44, 19, 0, 507, 508, 3, 46, 20, 0, 508, 509, 3, 40, 17, 0, 509, 511, 3, 14, 4, 0, 510, 512, 3, 42, 18, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 111, 1, 0, 0, 0, 513, 514, 3, 42, 18, 0, 514, 515, 3, 22, 8, 0, 515, 516, 3, 30, 12, 0, 516, 517, 3, 36, 15, 0, 517, 518, 3, 28, 11, 0, 518, 519, 3, 14, 4, 0, 519, 583, 1, 0, 0, 0, 520, 521, 3, 28, 11, 0, 521, 522, 3, 22, 8, 0, 522, 523, 3, 42, 18, 0, 523, 524, 3, 44, 19, 0, 524, 583, 1, 0, 0, 0, 525, 526, 3, 40, 17, 0, 526, 527, 3, 14, 4, 0, 527, 528, 3, 18, 6, 0, 528, 529, 3, 14, 4, 0, 529, 530, 3, 52, 23, 0, 530, 583, 1, 0, 0, 0, 531, 532, 3, 36, 15, 0, 532, 533, 3, 40, 17, 0, 533, 534, 3, 14, 4, 0, 534, 535, 3, 8, 1, 0, 535, 536, 3, 46, 20, 0, 536, 537, 3, 22, 8, 0, 537, 538, 3, 28, 11, 0, 538, 539, 3, 44, 19, 0, 539, 583, 1, 0, 0, 0, 540, 541, 3, 10, 2, 0, 541, 542, 3, 34, 14, 0, 542, 543, 3, 30, 12, 0, 543, 544, 3, 36, 15, 0, 544, 545, 3, 34, 14, 0, 545, 546, 3, 42, 18, 0, 546, 547, 3, 22, 8, 0, 547, 548, 3, 44, 19, 0, 548, 549, 3, 14, 4, 0, 549, 583, 1, 0, 0, 0, 550, 551, 3, 30, 12, 0, 551, 552, 3, 28, 11, 0, 552, 583, 1, 0, 0, 0, 553, 554, 3, 36, 15, 0, 554, 555, 3, 6, 0, 0, 555, 556, 3, 44, 19, 0, 556, 557, 3, 44, 19, 0, 557, 558, 3, 14, 4, 0, 558, 559, 3, 40, 17, 0, 559, 560, 3, 32, 13, 0, 560, 561, 3, 6, 0, 0, 561, 562, 3, 32, 13, 0, 562, 563, 3, 54, 24, 0, 563, 583, 1, 0, 0, 0, 564, 565, 3, 36, 15, 0, 565, 566, 3, 20, 7, 0, 566, 567, 3, 40, 17, 0, 567, 568, 3, 6, 0, 0, 568, 569, 3, 42, 18, 0, 569, 570, 3, 14, 4, 0, 570, 571, 3, 28, 11, 0, 571, 572, 3, 22, 8, 0, 572, 573, 3, 42, 18, 0, 573, 574, 3, 44, 19, 0, 574, 583, 1, 0, 0, 0, 575, 576, 3, 22, 8, 0, 576, 577, 3, 32, 13, 0, 577, 578, 3, 44, 19, 0, 578, 579, 3, 14, 4, 0, 579, 580, 3, 32, 13, 0, 580, 581, 3, 44, 19, 0, 581, 583, 1, 0, 0, 0, 582, 513, 1, 0, 0, 0, 582, 520, 1, 0, 0, 0, 582, 525, 1, 0, 0, 0, 582, 531, 1, 0, 0, 0, 582, 540, 1, 0, 0, 0, 582, 550, 1, 0, 0, 0, 582, 553, 1, 0, 0, 0, 582, 564, 1, 0, 0, 0, 582, 575, 1, 0, 0, 0, 583, 113, 1, 0, 0, 0, 584, 588, 5, 40, 0, 0, 585, 587, 8, 29, 0, 0, 586, 585, 1, 0, 0, 0, 587, 590, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 591, 592, 5, 41, 0, 0, 592, 115, 1, 0, 0, 0, 593, 597, 5, 91, 0, 0, 594, 596, 8, 32, 0, 0, 595, 594, 1, 0, 0, 0, 596, 599, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 600, 601, 5, 93, 0, 0, 601, 117, 1, 0, 0, 0, 602, 606, 5, 47, 0, 0, 603, 605, 8, 29, 0, 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 119, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 611, 8, 33, 0, 0, 610, 609, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 121, 1, 0, 0, 0, 614, 616, 7, 34, 0, 0, 615, 617, 8, 35, 0, 0, 616, 615, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 7, 34, 0, 0, 621, 123, 1, 0, 0, 0, 622, 623, 3, 66, 30, 0, 623, 624, 1, 0, 0, 0, 624, 625, 6, 59, 6, 0, 625, 125, 1, 0, 0, 0, 626, 627, 5, 35, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 6, 60, 9, 0, 629, 127, 1, 0, 0, 0, 630, 632, 5, 13, 0, 0, 631, 630, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 5, 10, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 6, 61, 0, 0, 636, 637, 6, 61, 8, 0, 637, 129, 1, 0, 0, 0, 638, 642, 3, 58, 26, 0, 639, 642, 3, 60, 27, 0, 640, 642, 5, 95, 0, 0, 641, 638, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 641, 640, 1, 0, 0, 0, 642, 648, 1, 0, 0, 0, 643, 647, 3, 58, 26, 0, 644, 647, 3, 60, 27, 0, 645, 647, 7, 36, 0, 0, 646, 643, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 646, 645, 1, 0, 0, 0, 647, 650, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 131, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 651, 652, 5, 46, 0, 0, 652, 133, 1, 0, 0, 0, 653, 654, 3, 66, 30, 0, 654, 655, 1, 0, 0, 0, 655, 656, 6, 64, 6, 0, 656, 135, 1, 0, 0, 0, 657, 659, 5, 13, 0, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 661, 5, 10, 0, 0, 661, 662, 1, 0, 0, 0, 662, 663, 6, 65, 7, 0, 663, 664, 6, 65, 8, 0, 664, 137, 1, 0, 0, 0, 665, 667, 5, 92, 0, 0, 666, 668, 8, 29, 0, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 139, 1, 0, 0, 0, 669, 681, 5, 123, 0, 0, 670, 680, 8, 37, 0, 0, 671, 675, 5, 123, 0, 0, 672, 674, 8, 29, 0, 0, 673, 672, 1, 0, 0, 0, 674, 677, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 678, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 678, 680, 5, 125, 0, 0, 679, 670, 1, 0, 0, 0, 679, 671, 1, 0, 0, 0, 680, 683, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 682, 1, 0, 0, 0, 682, 684, 1, 0, 0, 0, 683, 681, 1, 0, 0, 0, 684, 685, 5, 125, 0, 0, 685, 141, 1, 0, 0, 0, 686, 688, 8, 38, 0, 0, 687, 686, 1, 0, 0, 0, 688, 689, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 690, 143, 1, 0, 0, 0, 691, 692, 3, 66, 30, 0, 692, 693, 1, 0, 0, 0, 693, 694, 6, 69, 6, 0, 694, 145, 1, 0, 0, 0, 695, 697, 5, 13, 0, 0, 696, 695, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 5, 10, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 6, 70, 0, 0, 701, 702, 6, 70, 8, 0, 702, 147, 1, 0, 0, 0, 703, 707, 5, 91, 0, 0, 704, 706, 8, 32, 0, 0, 705, 704, 1, 0, 0, 0, 706, 709, 1, 0, 0, 0, 707, 705, 1, 0, 0, 0, 707, 708, 1, 0, 0, 0, 708, 710, 1, 0, 0, 0, 709, 707, 1, 0, 0, 0, 710, 711, 5, 93, 0, 0, 711, 149, 1, 0, 0, 0, 712, 716, 5, 47, 0, 0, 713, 715, 8, 29, 0, 0, 714, 713, 1, 0, 0, 0, 715, 718, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 151, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 719, 721, 8, 39, 0, 0, 720, 719, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 153, 1, 0, 0, 0, 724, 725, 5, 58, 0, 0, 725, 155, 1, 0, 0, 0, 726, 728, 5, 13, 0, 0, 727, 726, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 730, 5, 10, 0, 0, 730, 731, 1, 0, 0, 0, 731, 732, 6, 75, 0, 0, 732, 733, 6, 75, 8, 0, 733, 157, 1, 0, 0, 0, 734, 736, 8, 29, 0, 0, 735, 734, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 735, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 159, 1, 0, 0, 0, 57, 0, 1, 2, 3, 4, 5, 223, 226, 235, 242, 268, 275, 280, 287, 296, 301, 308, 316, 321, 347, 354, 361, 368, 376, 380, 385, 392, 399, 406, 412, 435, 450, 478, 497, 511, 582, 588, 597, 606, 612, 618, 631, 641, 646, 648, 658, 667, 675, 679, 681, 689, 696, 707, 716, 722, 727, 737, 10, 6, 0, 0, 5, 5, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 1, 0, 7, 1, 0, 7, 2, 0, 4, 0, 0, 7, 7, 0] \ No newline at end of file +[4, 0, 40, 737, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 4, 30, 222, 8, 30, 11, 30, 12, 30, 223, 1, 31, 3, 31, 227, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 5, 32, 234, 8, 32, 10, 32, 12, 32, 237, 9, 32, 1, 32, 1, 32, 5, 32, 241, 8, 32, 10, 32, 12, 32, 244, 9, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 267, 8, 32, 10, 32, 12, 32, 270, 9, 32, 1, 32, 1, 32, 4, 32, 274, 8, 32, 11, 32, 12, 32, 275, 1, 33, 5, 33, 279, 8, 33, 10, 33, 12, 33, 282, 9, 33, 1, 33, 1, 33, 5, 33, 286, 8, 33, 10, 33, 12, 33, 289, 9, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 295, 8, 33, 11, 33, 12, 33, 296, 1, 34, 5, 34, 300, 8, 34, 10, 34, 12, 34, 303, 9, 34, 1, 34, 1, 34, 5, 34, 307, 8, 34, 10, 34, 12, 34, 310, 9, 34, 1, 35, 4, 35, 313, 8, 35, 11, 35, 12, 35, 314, 1, 35, 5, 35, 318, 8, 35, 10, 35, 12, 35, 321, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 5, 40, 344, 8, 40, 10, 40, 12, 40, 347, 9, 40, 1, 40, 1, 40, 5, 40, 351, 8, 40, 10, 40, 12, 40, 354, 9, 40, 1, 40, 1, 40, 5, 40, 358, 8, 40, 10, 40, 12, 40, 361, 9, 40, 1, 40, 1, 40, 5, 40, 365, 8, 40, 10, 40, 12, 40, 368, 9, 40, 1, 40, 1, 40, 1, 40, 5, 40, 373, 8, 40, 10, 40, 12, 40, 376, 9, 40, 1, 40, 3, 40, 379, 8, 40, 1, 41, 5, 41, 382, 8, 41, 10, 41, 12, 41, 385, 9, 41, 1, 41, 1, 41, 5, 41, 389, 8, 41, 10, 41, 12, 41, 392, 9, 41, 1, 41, 1, 41, 5, 41, 396, 8, 41, 10, 41, 12, 41, 399, 9, 41, 1, 41, 1, 41, 5, 41, 403, 8, 41, 10, 41, 12, 41, 406, 9, 41, 1, 41, 5, 41, 409, 8, 41, 10, 41, 12, 41, 412, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 432, 8, 43, 10, 43, 12, 43, 435, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 447, 8, 44, 10, 44, 12, 44, 450, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 3, 48, 477, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 496, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 510, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 581, 8, 53, 1, 54, 1, 54, 5, 54, 585, 8, 54, 10, 54, 12, 54, 588, 9, 54, 1, 54, 1, 54, 1, 55, 1, 55, 5, 55, 594, 8, 55, 10, 55, 12, 55, 597, 9, 55, 1, 55, 1, 55, 1, 56, 1, 56, 5, 56, 603, 8, 56, 10, 56, 12, 56, 606, 9, 56, 1, 57, 4, 57, 609, 8, 57, 11, 57, 12, 57, 610, 1, 58, 1, 58, 4, 58, 615, 8, 58, 11, 58, 12, 58, 616, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 3, 61, 630, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 3, 62, 640, 8, 62, 1, 62, 1, 62, 1, 62, 5, 62, 645, 8, 62, 10, 62, 12, 62, 648, 9, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 3, 65, 657, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 666, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 672, 8, 67, 10, 67, 12, 67, 675, 9, 67, 1, 67, 5, 67, 678, 8, 67, 10, 67, 12, 67, 681, 9, 67, 1, 67, 1, 67, 1, 68, 4, 68, 686, 8, 68, 11, 68, 12, 68, 687, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 3, 70, 695, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 5, 71, 704, 8, 71, 10, 71, 12, 71, 707, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 5, 72, 713, 8, 72, 10, 72, 12, 72, 716, 9, 72, 1, 73, 4, 73, 719, 8, 73, 11, 73, 12, 73, 720, 1, 74, 1, 74, 1, 75, 3, 75, 726, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 4, 76, 734, 8, 76, 11, 76, 12, 76, 735, 7, 352, 366, 374, 390, 433, 448, 687, 0, 77, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20, 0, 22, 0, 24, 0, 26, 0, 28, 0, 30, 0, 32, 0, 34, 0, 36, 0, 38, 0, 40, 0, 42, 0, 44, 0, 46, 0, 48, 0, 50, 0, 52, 0, 54, 0, 56, 0, 58, 0, 60, 0, 62, 0, 64, 0, 66, 1, 68, 2, 70, 3, 72, 4, 74, 5, 76, 6, 78, 7, 80, 8, 82, 9, 84, 10, 86, 11, 88, 12, 90, 13, 92, 14, 94, 15, 96, 16, 98, 17, 100, 0, 102, 0, 104, 18, 106, 19, 108, 20, 110, 21, 112, 22, 114, 23, 116, 24, 118, 25, 120, 26, 122, 27, 124, 0, 126, 0, 128, 28, 130, 29, 132, 30, 134, 0, 136, 0, 138, 31, 140, 32, 142, 33, 144, 0, 146, 34, 148, 35, 150, 36, 152, 37, 154, 38, 156, 39, 158, 40, 6, 0, 1, 2, 3, 4, 5, 40, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 4, 0, 9, 9, 32, 32, 160, 160, 65279, 65279, 2, 0, 42, 43, 45, 45, 2, 0, 10, 10, 13, 13, 4, 0, 10, 10, 13, 13, 91, 91, 93, 93, 3, 0, 10, 10, 13, 13, 40, 41, 7, 0, 10, 10, 13, 13, 40, 41, 91, 91, 93, 93, 123, 123, 125, 125, 7, 0, 9, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 34, 34, 39, 39, 6, 0, 9, 10, 13, 13, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 45, 45, 95, 95, 4, 0, 10, 10, 13, 13, 123, 123, 125, 125, 4, 0, 9, 10, 13, 13, 32, 32, 92, 92, 4, 0, 9, 10, 13, 13, 32, 32, 58, 58, 761, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 1, 100, 1, 0, 0, 0, 1, 102, 1, 0, 0, 0, 1, 104, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 1, 108, 1, 0, 0, 0, 1, 110, 1, 0, 0, 0, 1, 112, 1, 0, 0, 0, 1, 114, 1, 0, 0, 0, 1, 116, 1, 0, 0, 0, 1, 118, 1, 0, 0, 0, 1, 120, 1, 0, 0, 0, 1, 122, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 2, 126, 1, 0, 0, 0, 2, 128, 1, 0, 0, 0, 2, 130, 1, 0, 0, 0, 2, 132, 1, 0, 0, 0, 3, 134, 1, 0, 0, 0, 3, 136, 1, 0, 0, 0, 3, 138, 1, 0, 0, 0, 3, 140, 1, 0, 0, 0, 3, 142, 1, 0, 0, 0, 4, 144, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 4, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 5, 156, 1, 0, 0, 0, 5, 158, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 164, 1, 0, 0, 0, 12, 166, 1, 0, 0, 0, 14, 168, 1, 0, 0, 0, 16, 170, 1, 0, 0, 0, 18, 172, 1, 0, 0, 0, 20, 174, 1, 0, 0, 0, 22, 176, 1, 0, 0, 0, 24, 178, 1, 0, 0, 0, 26, 180, 1, 0, 0, 0, 28, 182, 1, 0, 0, 0, 30, 184, 1, 0, 0, 0, 32, 186, 1, 0, 0, 0, 34, 188, 1, 0, 0, 0, 36, 190, 1, 0, 0, 0, 38, 192, 1, 0, 0, 0, 40, 194, 1, 0, 0, 0, 42, 196, 1, 0, 0, 0, 44, 198, 1, 0, 0, 0, 46, 200, 1, 0, 0, 0, 48, 202, 1, 0, 0, 0, 50, 204, 1, 0, 0, 0, 52, 206, 1, 0, 0, 0, 54, 208, 1, 0, 0, 0, 56, 210, 1, 0, 0, 0, 58, 212, 1, 0, 0, 0, 60, 214, 1, 0, 0, 0, 62, 216, 1, 0, 0, 0, 64, 218, 1, 0, 0, 0, 66, 221, 1, 0, 0, 0, 68, 226, 1, 0, 0, 0, 70, 235, 1, 0, 0, 0, 72, 280, 1, 0, 0, 0, 74, 301, 1, 0, 0, 0, 76, 312, 1, 0, 0, 0, 78, 326, 1, 0, 0, 0, 80, 330, 1, 0, 0, 0, 82, 334, 1, 0, 0, 0, 84, 338, 1, 0, 0, 0, 86, 345, 1, 0, 0, 0, 88, 383, 1, 0, 0, 0, 90, 413, 1, 0, 0, 0, 92, 427, 1, 0, 0, 0, 94, 441, 1, 0, 0, 0, 96, 455, 1, 0, 0, 0, 98, 469, 1, 0, 0, 0, 100, 471, 1, 0, 0, 0, 102, 476, 1, 0, 0, 0, 104, 483, 1, 0, 0, 0, 106, 485, 1, 0, 0, 0, 108, 487, 1, 0, 0, 0, 110, 497, 1, 0, 0, 0, 112, 580, 1, 0, 0, 0, 114, 582, 1, 0, 0, 0, 116, 591, 1, 0, 0, 0, 118, 600, 1, 0, 0, 0, 120, 608, 1, 0, 0, 0, 122, 612, 1, 0, 0, 0, 124, 620, 1, 0, 0, 0, 126, 624, 1, 0, 0, 0, 128, 629, 1, 0, 0, 0, 130, 639, 1, 0, 0, 0, 132, 649, 1, 0, 0, 0, 134, 651, 1, 0, 0, 0, 136, 656, 1, 0, 0, 0, 138, 663, 1, 0, 0, 0, 140, 667, 1, 0, 0, 0, 142, 685, 1, 0, 0, 0, 144, 689, 1, 0, 0, 0, 146, 694, 1, 0, 0, 0, 148, 701, 1, 0, 0, 0, 150, 710, 1, 0, 0, 0, 152, 718, 1, 0, 0, 0, 154, 722, 1, 0, 0, 0, 156, 725, 1, 0, 0, 0, 158, 733, 1, 0, 0, 0, 160, 161, 7, 0, 0, 0, 161, 7, 1, 0, 0, 0, 162, 163, 7, 1, 0, 0, 163, 9, 1, 0, 0, 0, 164, 165, 7, 2, 0, 0, 165, 11, 1, 0, 0, 0, 166, 167, 7, 3, 0, 0, 167, 13, 1, 0, 0, 0, 168, 169, 7, 4, 0, 0, 169, 15, 1, 0, 0, 0, 170, 171, 7, 5, 0, 0, 171, 17, 1, 0, 0, 0, 172, 173, 7, 6, 0, 0, 173, 19, 1, 0, 0, 0, 174, 175, 7, 7, 0, 0, 175, 21, 1, 0, 0, 0, 176, 177, 7, 8, 0, 0, 177, 23, 1, 0, 0, 0, 178, 179, 7, 9, 0, 0, 179, 25, 1, 0, 0, 0, 180, 181, 7, 10, 0, 0, 181, 27, 1, 0, 0, 0, 182, 183, 7, 11, 0, 0, 183, 29, 1, 0, 0, 0, 184, 185, 7, 12, 0, 0, 185, 31, 1, 0, 0, 0, 186, 187, 7, 13, 0, 0, 187, 33, 1, 0, 0, 0, 188, 189, 7, 14, 0, 0, 189, 35, 1, 0, 0, 0, 190, 191, 7, 15, 0, 0, 191, 37, 1, 0, 0, 0, 192, 193, 7, 16, 0, 0, 193, 39, 1, 0, 0, 0, 194, 195, 7, 17, 0, 0, 195, 41, 1, 0, 0, 0, 196, 197, 7, 18, 0, 0, 197, 43, 1, 0, 0, 0, 198, 199, 7, 19, 0, 0, 199, 45, 1, 0, 0, 0, 200, 201, 7, 20, 0, 0, 201, 47, 1, 0, 0, 0, 202, 203, 7, 21, 0, 0, 203, 49, 1, 0, 0, 0, 204, 205, 7, 22, 0, 0, 205, 51, 1, 0, 0, 0, 206, 207, 7, 23, 0, 0, 207, 53, 1, 0, 0, 0, 208, 209, 7, 24, 0, 0, 209, 55, 1, 0, 0, 0, 210, 211, 7, 25, 0, 0, 211, 57, 1, 0, 0, 0, 212, 213, 7, 26, 0, 0, 213, 59, 1, 0, 0, 0, 214, 215, 2, 48, 57, 0, 215, 61, 1, 0, 0, 0, 216, 217, 7, 27, 0, 0, 217, 63, 1, 0, 0, 0, 218, 219, 7, 28, 0, 0, 219, 65, 1, 0, 0, 0, 220, 222, 3, 62, 28, 0, 221, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 67, 1, 0, 0, 0, 225, 227, 5, 13, 0, 0, 226, 225, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 229, 5, 10, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 31, 0, 0, 231, 69, 1, 0, 0, 0, 232, 234, 3, 66, 30, 0, 233, 232, 1, 0, 0, 0, 234, 237, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 238, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 238, 242, 5, 62, 0, 0, 239, 241, 3, 66, 30, 0, 240, 239, 1, 0, 0, 0, 241, 244, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 245, 246, 5, 33, 0, 0, 246, 247, 5, 35, 0, 0, 247, 248, 5, 32, 0, 0, 248, 249, 5, 64, 0, 0, 249, 250, 5, 113, 0, 0, 250, 251, 5, 110, 0, 0, 251, 252, 5, 97, 0, 0, 252, 253, 5, 46, 0, 0, 253, 254, 5, 112, 0, 0, 254, 255, 5, 97, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 114, 0, 0, 257, 258, 5, 46, 0, 0, 258, 259, 5, 115, 0, 0, 259, 260, 5, 111, 0, 0, 260, 261, 5, 117, 0, 0, 261, 262, 5, 114, 0, 0, 262, 263, 5, 99, 0, 0, 263, 264, 5, 101, 0, 0, 264, 268, 1, 0, 0, 0, 265, 267, 3, 66, 30, 0, 266, 265, 1, 0, 0, 0, 267, 270, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 271, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 271, 273, 5, 61, 0, 0, 272, 274, 8, 29, 0, 0, 273, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 71, 1, 0, 0, 0, 277, 279, 3, 66, 30, 0, 278, 277, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 283, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 283, 287, 5, 62, 0, 0, 284, 286, 3, 66, 30, 0, 285, 284, 1, 0, 0, 0, 286, 289, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 290, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 290, 291, 5, 33, 0, 0, 291, 292, 5, 35, 0, 0, 292, 294, 1, 0, 0, 0, 293, 295, 8, 29, 0, 0, 294, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 73, 1, 0, 0, 0, 298, 300, 3, 66, 30, 0, 299, 298, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 304, 308, 5, 62, 0, 0, 305, 307, 8, 29, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 75, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 313, 5, 35, 0, 0, 312, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 319, 1, 0, 0, 0, 316, 318, 3, 66, 30, 0, 317, 316, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 322, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 323, 5, 63, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 6, 35, 1, 0, 325, 77, 1, 0, 0, 0, 326, 327, 5, 35, 0, 0, 327, 328, 1, 0, 0, 0, 328, 329, 6, 36, 2, 0, 329, 79, 1, 0, 0, 0, 330, 331, 3, 64, 29, 0, 331, 332, 1, 0, 0, 0, 332, 333, 6, 37, 3, 0, 333, 81, 1, 0, 0, 0, 334, 335, 5, 36, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 6, 38, 4, 0, 337, 83, 1, 0, 0, 0, 338, 339, 5, 64, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 6, 39, 5, 0, 341, 85, 1, 0, 0, 0, 342, 344, 3, 66, 30, 0, 343, 342, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 352, 5, 91, 0, 0, 349, 351, 8, 30, 0, 0, 350, 349, 1, 0, 0, 0, 351, 354, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 355, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 359, 5, 93, 0, 0, 356, 358, 3, 66, 30, 0, 357, 356, 1, 0, 0, 0, 358, 361, 1, 0, 0, 0, 359, 357, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 378, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 362, 366, 5, 40, 0, 0, 363, 365, 8, 31, 0, 0, 364, 363, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 379, 5, 41, 0, 0, 370, 374, 5, 91, 0, 0, 371, 373, 8, 30, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 379, 5, 93, 0, 0, 378, 362, 1, 0, 0, 0, 378, 370, 1, 0, 0, 0, 379, 87, 1, 0, 0, 0, 380, 382, 3, 66, 30, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 386, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 390, 5, 91, 0, 0, 387, 389, 8, 30, 0, 0, 388, 387, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, 393, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 397, 5, 93, 0, 0, 394, 396, 3, 66, 30, 0, 395, 394, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 400, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 400, 404, 5, 58, 0, 0, 401, 403, 3, 66, 30, 0, 402, 401, 1, 0, 0, 0, 403, 406, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 410, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 407, 409, 8, 29, 0, 0, 408, 407, 1, 0, 0, 0, 409, 412, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 89, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 413, 414, 5, 42, 0, 0, 414, 415, 5, 42, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 3, 16, 5, 0, 417, 418, 3, 22, 8, 0, 418, 419, 3, 28, 11, 0, 419, 420, 3, 44, 19, 0, 420, 421, 3, 14, 4, 0, 421, 422, 3, 40, 17, 0, 422, 423, 3, 42, 18, 0, 423, 424, 5, 58, 0, 0, 424, 425, 5, 42, 0, 0, 425, 426, 5, 42, 0, 0, 426, 91, 1, 0, 0, 0, 427, 428, 5, 60, 0, 0, 428, 429, 5, 97, 0, 0, 429, 433, 1, 0, 0, 0, 430, 432, 9, 0, 0, 0, 431, 430, 1, 0, 0, 0, 432, 435, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 436, 437, 5, 60, 0, 0, 437, 438, 5, 47, 0, 0, 438, 439, 5, 97, 0, 0, 439, 440, 5, 62, 0, 0, 440, 93, 1, 0, 0, 0, 441, 442, 5, 96, 0, 0, 442, 443, 5, 96, 0, 0, 443, 444, 5, 96, 0, 0, 444, 448, 1, 0, 0, 0, 445, 447, 9, 0, 0, 0, 446, 445, 1, 0, 0, 0, 447, 450, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 449, 451, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 451, 452, 5, 96, 0, 0, 452, 453, 5, 96, 0, 0, 453, 454, 5, 96, 0, 0, 454, 95, 1, 0, 0, 0, 455, 456, 5, 42, 0, 0, 456, 457, 5, 42, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 3, 36, 15, 0, 459, 460, 3, 40, 17, 0, 460, 461, 3, 34, 14, 0, 461, 462, 3, 30, 12, 0, 462, 463, 3, 36, 15, 0, 463, 464, 3, 44, 19, 0, 464, 465, 3, 42, 18, 0, 465, 466, 5, 58, 0, 0, 466, 467, 5, 42, 0, 0, 467, 468, 5, 42, 0, 0, 468, 97, 1, 0, 0, 0, 469, 470, 9, 0, 0, 0, 470, 99, 1, 0, 0, 0, 471, 472, 3, 66, 30, 0, 472, 473, 1, 0, 0, 0, 473, 474, 6, 47, 6, 0, 474, 101, 1, 0, 0, 0, 475, 477, 5, 13, 0, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 5, 10, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 6, 48, 7, 0, 481, 482, 6, 48, 8, 0, 482, 103, 1, 0, 0, 0, 483, 484, 5, 61, 0, 0, 484, 105, 1, 0, 0, 0, 485, 486, 5, 44, 0, 0, 486, 107, 1, 0, 0, 0, 487, 488, 3, 20, 7, 0, 488, 489, 3, 6, 0, 0, 489, 490, 3, 42, 18, 0, 490, 491, 3, 40, 17, 0, 491, 492, 3, 34, 14, 0, 492, 493, 3, 28, 11, 0, 493, 495, 3, 14, 4, 0, 494, 496, 3, 42, 18, 0, 495, 494, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 109, 1, 0, 0, 0, 497, 498, 3, 46, 20, 0, 498, 499, 3, 42, 18, 0, 499, 500, 3, 14, 4, 0, 500, 501, 3, 42, 18, 0, 501, 502, 3, 16, 5, 0, 502, 503, 3, 14, 4, 0, 503, 504, 3, 6, 0, 0, 504, 505, 3, 44, 19, 0, 505, 506, 3, 46, 20, 0, 506, 507, 3, 40, 17, 0, 507, 509, 3, 14, 4, 0, 508, 510, 3, 42, 18, 0, 509, 508, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 111, 1, 0, 0, 0, 511, 512, 3, 42, 18, 0, 512, 513, 3, 22, 8, 0, 513, 514, 3, 30, 12, 0, 514, 515, 3, 36, 15, 0, 515, 516, 3, 28, 11, 0, 516, 517, 3, 14, 4, 0, 517, 581, 1, 0, 0, 0, 518, 519, 3, 28, 11, 0, 519, 520, 3, 22, 8, 0, 520, 521, 3, 42, 18, 0, 521, 522, 3, 44, 19, 0, 522, 581, 1, 0, 0, 0, 523, 524, 3, 40, 17, 0, 524, 525, 3, 14, 4, 0, 525, 526, 3, 18, 6, 0, 526, 527, 3, 14, 4, 0, 527, 528, 3, 52, 23, 0, 528, 581, 1, 0, 0, 0, 529, 530, 3, 36, 15, 0, 530, 531, 3, 40, 17, 0, 531, 532, 3, 14, 4, 0, 532, 533, 3, 8, 1, 0, 533, 534, 3, 46, 20, 0, 534, 535, 3, 22, 8, 0, 535, 536, 3, 28, 11, 0, 536, 537, 3, 44, 19, 0, 537, 581, 1, 0, 0, 0, 538, 539, 3, 10, 2, 0, 539, 540, 3, 34, 14, 0, 540, 541, 3, 30, 12, 0, 541, 542, 3, 36, 15, 0, 542, 543, 3, 34, 14, 0, 543, 544, 3, 42, 18, 0, 544, 545, 3, 22, 8, 0, 545, 546, 3, 44, 19, 0, 546, 547, 3, 14, 4, 0, 547, 581, 1, 0, 0, 0, 548, 549, 3, 30, 12, 0, 549, 550, 3, 28, 11, 0, 550, 581, 1, 0, 0, 0, 551, 552, 3, 36, 15, 0, 552, 553, 3, 6, 0, 0, 553, 554, 3, 44, 19, 0, 554, 555, 3, 44, 19, 0, 555, 556, 3, 14, 4, 0, 556, 557, 3, 40, 17, 0, 557, 558, 3, 32, 13, 0, 558, 559, 3, 6, 0, 0, 559, 560, 3, 32, 13, 0, 560, 561, 3, 54, 24, 0, 561, 581, 1, 0, 0, 0, 562, 563, 3, 36, 15, 0, 563, 564, 3, 20, 7, 0, 564, 565, 3, 40, 17, 0, 565, 566, 3, 6, 0, 0, 566, 567, 3, 42, 18, 0, 567, 568, 3, 14, 4, 0, 568, 569, 3, 28, 11, 0, 569, 570, 3, 22, 8, 0, 570, 571, 3, 42, 18, 0, 571, 572, 3, 44, 19, 0, 572, 581, 1, 0, 0, 0, 573, 574, 3, 22, 8, 0, 574, 575, 3, 32, 13, 0, 575, 576, 3, 44, 19, 0, 576, 577, 3, 14, 4, 0, 577, 578, 3, 32, 13, 0, 578, 579, 3, 44, 19, 0, 579, 581, 1, 0, 0, 0, 580, 511, 1, 0, 0, 0, 580, 518, 1, 0, 0, 0, 580, 523, 1, 0, 0, 0, 580, 529, 1, 0, 0, 0, 580, 538, 1, 0, 0, 0, 580, 548, 1, 0, 0, 0, 580, 551, 1, 0, 0, 0, 580, 562, 1, 0, 0, 0, 580, 573, 1, 0, 0, 0, 581, 113, 1, 0, 0, 0, 582, 586, 5, 40, 0, 0, 583, 585, 8, 29, 0, 0, 584, 583, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 589, 590, 5, 41, 0, 0, 590, 115, 1, 0, 0, 0, 591, 595, 5, 91, 0, 0, 592, 594, 8, 32, 0, 0, 593, 592, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 5, 93, 0, 0, 599, 117, 1, 0, 0, 0, 600, 604, 5, 47, 0, 0, 601, 603, 8, 29, 0, 0, 602, 601, 1, 0, 0, 0, 603, 606, 1, 0, 0, 0, 604, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 119, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 607, 609, 8, 33, 0, 0, 608, 607, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 608, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 121, 1, 0, 0, 0, 612, 614, 7, 34, 0, 0, 613, 615, 8, 35, 0, 0, 614, 613, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 7, 34, 0, 0, 619, 123, 1, 0, 0, 0, 620, 621, 3, 66, 30, 0, 621, 622, 1, 0, 0, 0, 622, 623, 6, 59, 6, 0, 623, 125, 1, 0, 0, 0, 624, 625, 5, 35, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 6, 60, 9, 0, 627, 127, 1, 0, 0, 0, 628, 630, 5, 13, 0, 0, 629, 628, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 5, 10, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 6, 61, 0, 0, 634, 635, 6, 61, 8, 0, 635, 129, 1, 0, 0, 0, 636, 640, 3, 58, 26, 0, 637, 640, 3, 60, 27, 0, 638, 640, 5, 95, 0, 0, 639, 636, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 639, 638, 1, 0, 0, 0, 640, 646, 1, 0, 0, 0, 641, 645, 3, 58, 26, 0, 642, 645, 3, 60, 27, 0, 643, 645, 7, 36, 0, 0, 644, 641, 1, 0, 0, 0, 644, 642, 1, 0, 0, 0, 644, 643, 1, 0, 0, 0, 645, 648, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 131, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 649, 650, 5, 46, 0, 0, 650, 133, 1, 0, 0, 0, 651, 652, 3, 66, 30, 0, 652, 653, 1, 0, 0, 0, 653, 654, 6, 64, 6, 0, 654, 135, 1, 0, 0, 0, 655, 657, 5, 13, 0, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 10, 0, 0, 659, 660, 1, 0, 0, 0, 660, 661, 6, 65, 7, 0, 661, 662, 6, 65, 8, 0, 662, 137, 1, 0, 0, 0, 663, 665, 5, 92, 0, 0, 664, 666, 8, 29, 0, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 139, 1, 0, 0, 0, 667, 679, 5, 123, 0, 0, 668, 678, 8, 37, 0, 0, 669, 673, 5, 123, 0, 0, 670, 672, 8, 29, 0, 0, 671, 670, 1, 0, 0, 0, 672, 675, 1, 0, 0, 0, 673, 671, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 676, 678, 5, 125, 0, 0, 677, 668, 1, 0, 0, 0, 677, 669, 1, 0, 0, 0, 678, 681, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 682, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 682, 683, 5, 125, 0, 0, 683, 141, 1, 0, 0, 0, 684, 686, 8, 38, 0, 0, 685, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 688, 143, 1, 0, 0, 0, 689, 690, 3, 66, 30, 0, 690, 691, 1, 0, 0, 0, 691, 692, 6, 69, 6, 0, 692, 145, 1, 0, 0, 0, 693, 695, 5, 13, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 5, 10, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 6, 70, 0, 0, 699, 700, 6, 70, 8, 0, 700, 147, 1, 0, 0, 0, 701, 705, 5, 91, 0, 0, 702, 704, 8, 32, 0, 0, 703, 702, 1, 0, 0, 0, 704, 707, 1, 0, 0, 0, 705, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 708, 1, 0, 0, 0, 707, 705, 1, 0, 0, 0, 708, 709, 5, 93, 0, 0, 709, 149, 1, 0, 0, 0, 710, 714, 5, 47, 0, 0, 711, 713, 8, 29, 0, 0, 712, 711, 1, 0, 0, 0, 713, 716, 1, 0, 0, 0, 714, 712, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 151, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 717, 719, 8, 39, 0, 0, 718, 717, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 153, 1, 0, 0, 0, 722, 723, 5, 58, 0, 0, 723, 155, 1, 0, 0, 0, 724, 726, 5, 13, 0, 0, 725, 724, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 5, 10, 0, 0, 728, 729, 1, 0, 0, 0, 729, 730, 6, 75, 0, 0, 730, 731, 6, 75, 8, 0, 731, 157, 1, 0, 0, 0, 732, 734, 8, 29, 0, 0, 733, 732, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 159, 1, 0, 0, 0, 57, 0, 1, 2, 3, 4, 5, 223, 226, 235, 242, 268, 275, 280, 287, 296, 301, 308, 314, 319, 345, 352, 359, 366, 374, 378, 383, 390, 397, 404, 410, 433, 448, 476, 495, 509, 580, 586, 595, 604, 610, 616, 629, 639, 644, 646, 656, 665, 673, 677, 679, 687, 694, 705, 714, 720, 725, 735, 10, 6, 0, 0, 5, 5, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 1, 0, 7, 1, 0, 7, 2, 0, 4, 0, 0, 7, 7, 0] \ No newline at end of file diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs index 05b9f41f87..2f1efd8dca 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs @@ -45,27 +45,28 @@ public const int ESCAPE_CHARACTER=31, EXPRESSION=32, TEXT=33, NEWLINE_IN_ENTITY=34, COMPOSITE_ENTITY=35, REGEX_ENTITY=36, ENTITY_TEXT=37, COLON_MARK=38, NEWLINE_IN_QNA=39, QNA_TEXT=40; public const int - RULE_file = 0, RULE_paragraph = 1, RULE_newline = 2, RULE_errorString = 3, - RULE_nestedIntentSection = 4, RULE_nestedIntentNameLine = 5, RULE_nestedIntentName = 6, - RULE_nameIdentifier = 7, RULE_nestedIntentBodyDefinition = 8, RULE_subIntentDefinition = 9, - RULE_simpleIntentSection = 10, RULE_intentDefinition = 11, RULE_intentNameLine = 12, - RULE_intentName = 13, RULE_intentBody = 14, RULE_normalIntentBody = 15, - RULE_normalIntentString = 16, RULE_newEntitySection = 17, RULE_newEntityDefinition = 18, - RULE_newEntityListbody = 19, RULE_newEntityLine = 20, RULE_newCompositeDefinition = 21, - RULE_newRegexDefinition = 22, RULE_newEntityType = 23, RULE_newEntityRoles = 24, - RULE_newEntityUsesFeatures = 25, RULE_newEntityRoleOrFeatures = 26, RULE_newEntityName = 27, - RULE_newEntityNameWithWS = 28, RULE_entitySection = 29, RULE_entityDefinition = 30, - RULE_entityLine = 31, RULE_entityName = 32, RULE_entityType = 33, RULE_compositeEntityIdentifier = 34, - RULE_regexEntityIdentifier = 35, RULE_entityListBody = 36, RULE_normalItemString = 37, - RULE_importSection = 38, RULE_importDefinition = 39, RULE_referenceSection = 40, - RULE_referenceDefinition = 41, RULE_qnaSection = 42, RULE_qnaDefinition = 43, - RULE_qnaSourceInfo = 44, RULE_qnaIdMark = 45, RULE_qnaQuestion = 46, RULE_questionText = 47, - RULE_moreQuestionsBody = 48, RULE_moreQuestion = 49, RULE_errorQuestionString = 50, - RULE_qnaAnswerBody = 51, RULE_filterSection = 52, RULE_promptSection = 53, - RULE_filterLine = 54, RULE_errorFilterLine = 55, RULE_multiLineAnswer = 56, - RULE_modelInfoSection = 57, RULE_modelInfoDefinition = 58; + RULE_file = 0, RULE_paragraph = 1, RULE_newline = 2, RULE_commentDefinition = 3, + RULE_errorString = 4, RULE_nestedIntentSection = 5, RULE_nestedIntentNameLine = 6, + RULE_nestedIntentName = 7, RULE_nameIdentifier = 8, RULE_nestedIntentBodyDefinition = 9, + RULE_subIntentDefinition = 10, RULE_simpleIntentSection = 11, RULE_intentDefinition = 12, + RULE_intentNameLine = 13, RULE_intentName = 14, RULE_intentBody = 15, + RULE_normalIntentBody = 16, RULE_normalIntentString = 17, RULE_newEntitySection = 18, + RULE_newEntityDefinition = 19, RULE_newEntityListbody = 20, RULE_newEntityLine = 21, + RULE_newCompositeDefinition = 22, RULE_newRegexDefinition = 23, RULE_newEntityType = 24, + RULE_newEntityRoles = 25, RULE_newEntityUsesFeatures = 26, RULE_newEntityRoleOrFeatures = 27, + RULE_newEntityName = 28, RULE_newEntityNameWithWS = 29, RULE_entitySection = 30, + RULE_entityDefinition = 31, RULE_entityLine = 32, RULE_entityName = 33, + RULE_entityType = 34, RULE_compositeEntityIdentifier = 35, RULE_regexEntityIdentifier = 36, + RULE_entityListBody = 37, RULE_normalItemString = 38, RULE_importSection = 39, + RULE_importDefinition = 40, RULE_referenceSection = 41, RULE_referenceDefinition = 42, + RULE_qnaSection = 43, RULE_qnaDefinition = 44, RULE_qnaSourceInfo = 45, + RULE_qnaIdMark = 46, RULE_qnaQuestion = 47, RULE_questionText = 48, RULE_moreQuestionsBody = 49, + RULE_moreQuestion = 50, RULE_errorQuestionString = 51, RULE_qnaAnswerBody = 52, + RULE_filterSection = 53, RULE_promptSection = 54, RULE_filterLine = 55, + RULE_errorFilterLine = 56, RULE_multiLineAnswer = 57, RULE_modelInfoSection = 58, + RULE_modelInfoDefinition = 59; public static readonly string[] ruleNames = { - "file", "paragraph", "newline", "errorString", "nestedIntentSection", + "file", "paragraph", "newline", "commentDefinition", "errorString", "nestedIntentSection", "nestedIntentNameLine", "nestedIntentName", "nameIdentifier", "nestedIntentBodyDefinition", "subIntentDefinition", "simpleIntentSection", "intentDefinition", "intentNameLine", "intentName", "intentBody", "normalIntentBody", "normalIntentString", @@ -169,7 +170,7 @@ public FileContext file() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 119; + State = 121; ErrorHandler.Sync(this); _alt = 1+1; do { @@ -177,7 +178,7 @@ public FileContext file() { case 1+1: { { - State = 118; + State = 120; paragraph(); } } @@ -185,11 +186,11 @@ public FileContext file() { default: throw new NoViableAltException(this); } - State = 121; + State = 123; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,0,Context); } while ( _alt!=1 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); - State = 123; + State = 125; Match(Eof); } } @@ -230,6 +231,9 @@ [System.Diagnostics.DebuggerNonUserCode] public QnaSectionContext qnaSection() { [System.Diagnostics.DebuggerNonUserCode] public ModelInfoSectionContext modelInfoSection() { return GetRuleContext(0); } + [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext commentDefinition() { + return GetRuleContext(0); + } public ParagraphContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -258,72 +262,79 @@ public ParagraphContext paragraph() { ParagraphContext _localctx = new ParagraphContext(Context, State); EnterRule(_localctx, 2, RULE_paragraph); try { - State = 134; + State = 137; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,1,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 125; + State = 127; Match(NEWLINE); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 126; + State = 128; nestedIntentSection(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 127; + State = 129; simpleIntentSection(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 128; + State = 130; entitySection(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 129; + State = 131; newEntitySection(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 130; + State = 132; importSection(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 131; + State = 133; referenceSection(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 132; + State = 134; qnaSection(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 133; + State = 135; modelInfoSection(); } break; + case 10: + EnterOuterAlt(_localctx, 10); + { + State = 136; + commentDefinition(); + } + break; } } catch (RecognitionException re) { @@ -375,21 +386,21 @@ public NewlineContext newline() { try { EnterOuterAlt(_localctx, 1); { - State = 139; + State = 142; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 136; + State = 139; Match(WS); } } - State = 141; + State = 144; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 142; + State = 145; _la = TokenStream.LA(1); if ( !(_la==Eof || _la==NEWLINE) ) { ErrorHandler.RecoverInline(this); @@ -411,6 +422,64 @@ public NewlineContext newline() { return _localctx; } + public partial class CommentDefinitionContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMENT() { return GetToken(LUFileParser.COMMENT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NEWLINE() { return GetToken(LUFileParser.NEWLINE, 0); } + public CommentDefinitionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_commentDefinition; } } + [System.Diagnostics.DebuggerNonUserCode] + public override void EnterRule(IParseTreeListener listener) { + ILUFileParserListener typedListener = listener as ILUFileParserListener; + if (typedListener != null) typedListener.EnterCommentDefinition(this); + } + [System.Diagnostics.DebuggerNonUserCode] + public override void ExitRule(IParseTreeListener listener) { + ILUFileParserListener typedListener = listener as ILUFileParserListener; + if (typedListener != null) typedListener.ExitCommentDefinition(this); + } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + ILUFileParserVisitor typedVisitor = visitor as ILUFileParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitCommentDefinition(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public CommentDefinitionContext commentDefinition() { + CommentDefinitionContext _localctx = new CommentDefinitionContext(Context, State); + EnterRule(_localctx, 6, RULE_commentDefinition); + try { + EnterOuterAlt(_localctx, 1); + { + State = 147; + Match(COMMENT); + State = 149; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,3,Context) ) { + case 1: + { + State = 148; + Match(NEWLINE); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + public partial class ErrorStringContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] WS() { return GetTokens(LUFileParser.WS); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WS(int i) { @@ -446,13 +515,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ErrorStringContext errorString() { ErrorStringContext _localctx = new ErrorStringContext(Context, State); - EnterRule(_localctx, 6, RULE_errorString); + EnterRule(_localctx, 8, RULE_errorString); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 145; + State = 152; ErrorHandler.Sync(this); _alt = 1; do { @@ -460,7 +529,7 @@ public ErrorStringContext errorString() { case 1: { { - State = 144; + State = 151; _la = TokenStream.LA(1); if ( !(_la==WS || _la==INVALID_TOKEN_DEFAULT_MODE) ) { ErrorHandler.RecoverInline(this); @@ -475,9 +544,9 @@ public ErrorStringContext errorString() { default: throw new NoViableAltException(this); } - State = 147; + State = 154; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,3,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,4,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -525,13 +594,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NestedIntentSectionContext nestedIntentSection() { NestedIntentSectionContext _localctx = new NestedIntentSectionContext(Context, State); - EnterRule(_localctx, 8, RULE_nestedIntentSection); + EnterRule(_localctx, 10, RULE_nestedIntentSection); try { EnterOuterAlt(_localctx, 1); { - State = 149; + State = 156; nestedIntentNameLine(); - State = 150; + State = 157; nestedIntentBodyDefinition(); } } @@ -581,42 +650,42 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NestedIntentNameLineContext nestedIntentNameLine() { NestedIntentNameLineContext _localctx = new NestedIntentNameLineContext(Context, State); - EnterRule(_localctx, 10, RULE_nestedIntentNameLine); + EnterRule(_localctx, 12, RULE_nestedIntentNameLine); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 155; + State = 162; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 152; + State = 159; Match(WS); } } - State = 157; + State = 164; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 158; + State = 165; Match(HASH); - State = 162; + State = 169; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 159; + State = 166; Match(WS); } } - State = 164; + State = 171; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 165; + State = 172; nestedIntentName(); } } @@ -668,31 +737,31 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NestedIntentNameContext nestedIntentName() { NestedIntentNameContext _localctx = new NestedIntentNameContext(Context, State); - EnterRule(_localctx, 12, RULE_nestedIntentName); + EnterRule(_localctx, 14, RULE_nestedIntentName); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 167; + State = 174; nameIdentifier(); - State = 172; + State = 179; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,7,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,8,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 170; + State = 177; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case WS: { - State = 168; + State = 175; Match(WS); } break; case IDENTIFIER: { - State = 169; + State = 176; nameIdentifier(); } break; @@ -701,9 +770,9 @@ public NestedIntentNameContext nestedIntentName() { } } } - State = 174; + State = 181; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,7,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,8,Context); } } } @@ -753,26 +822,26 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NameIdentifierContext nameIdentifier() { NameIdentifierContext _localctx = new NameIdentifierContext(Context, State); - EnterRule(_localctx, 14, RULE_nameIdentifier); + EnterRule(_localctx, 16, RULE_nameIdentifier); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 175; + State = 182; Match(IDENTIFIER); - State = 180; + State = 187; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==DOT) { { { - State = 176; + State = 183; Match(DOT); - State = 177; + State = 184; Match(IDENTIFIER); } } - State = 182; + State = 189; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -822,12 +891,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NestedIntentBodyDefinitionContext nestedIntentBodyDefinition() { NestedIntentBodyDefinitionContext _localctx = new NestedIntentBodyDefinitionContext(Context, State); - EnterRule(_localctx, 16, RULE_nestedIntentBodyDefinition); + EnterRule(_localctx, 18, RULE_nestedIntentBodyDefinition); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 184; + State = 191; ErrorHandler.Sync(this); _alt = 1; do { @@ -835,7 +904,7 @@ public NestedIntentBodyDefinitionContext nestedIntentBodyDefinition() { case 1: { { - State = 183; + State = 190; subIntentDefinition(); } } @@ -843,9 +912,9 @@ public NestedIntentBodyDefinitionContext nestedIntentBodyDefinition() { default: throw new NoViableAltException(this); } - State = 186; + State = 193; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,9,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,10,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -895,28 +964,28 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SubIntentDefinitionContext subIntentDefinition() { SubIntentDefinitionContext _localctx = new SubIntentDefinitionContext(Context, State); - EnterRule(_localctx, 18, RULE_subIntentDefinition); + EnterRule(_localctx, 20, RULE_subIntentDefinition); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 191; + State = 198; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 188; + State = 195; Match(WS); } } - State = 193; + State = 200; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 194; + State = 201; Match(HASH); - State = 195; + State = 202; simpleIntentSection(); } } @@ -961,11 +1030,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SimpleIntentSectionContext simpleIntentSection() { SimpleIntentSectionContext _localctx = new SimpleIntentSectionContext(Context, State); - EnterRule(_localctx, 20, RULE_simpleIntentSection); + EnterRule(_localctx, 22, RULE_simpleIntentSection); try { EnterOuterAlt(_localctx, 1); { - State = 197; + State = 204; intentDefinition(); } } @@ -1013,18 +1082,18 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IntentDefinitionContext intentDefinition() { IntentDefinitionContext _localctx = new IntentDefinitionContext(Context, State); - EnterRule(_localctx, 22, RULE_intentDefinition); + EnterRule(_localctx, 24, RULE_intentDefinition); try { EnterOuterAlt(_localctx, 1); { - State = 199; + State = 206; intentNameLine(); - State = 201; + State = 208; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,11,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,12,Context) ) { case 1: { - State = 200; + State = 207; intentBody(); } break; @@ -1080,52 +1149,52 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IntentNameLineContext intentNameLine() { IntentNameLineContext _localctx = new IntentNameLineContext(Context, State); - EnterRule(_localctx, 24, RULE_intentNameLine); + EnterRule(_localctx, 26, RULE_intentNameLine); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 206; + State = 213; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 203; + State = 210; Match(WS); } } - State = 208; + State = 215; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 209; + State = 216; Match(HASH); - State = 211; + State = 218; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==HASH) { { - State = 210; + State = 217; Match(HASH); } } - State = 216; + State = 223; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 213; + State = 220; Match(WS); } } - State = 218; + State = 225; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 219; + State = 226; intentName(); } } @@ -1177,31 +1246,31 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IntentNameContext intentName() { IntentNameContext _localctx = new IntentNameContext(Context, State); - EnterRule(_localctx, 26, RULE_intentName); + EnterRule(_localctx, 28, RULE_intentName); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 221; + State = 228; nameIdentifier(); - State = 226; + State = 233; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,16,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 224; + State = 231; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case WS: { - State = 222; + State = 229; Match(WS); } break; case IDENTIFIER: { - State = 223; + State = 230; nameIdentifier(); } break; @@ -1210,9 +1279,9 @@ public IntentNameContext intentName() { } } } - State = 228; + State = 235; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,16,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); } } } @@ -1261,28 +1330,28 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IntentBodyContext intentBody() { IntentBodyContext _localctx = new IntentBodyContext(Context, State); - EnterRule(_localctx, 28, RULE_intentBody); + EnterRule(_localctx, 30, RULE_intentBody); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 232; + State = 239; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,18,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 229; + State = 236; Match(WS); } } } - State = 234; + State = 241; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,18,Context); } - State = 235; + State = 242; normalIntentBody(); } } @@ -1308,6 +1377,12 @@ [System.Diagnostics.DebuggerNonUserCode] public ErrorStringContext[] errorString [System.Diagnostics.DebuggerNonUserCode] public ErrorStringContext errorString(int i) { return GetRuleContext(i); } + [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext[] commentDefinition() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext commentDefinition(int i) { + return GetRuleContext(i); + } [System.Diagnostics.DebuggerNonUserCode] public NormalIntentStringContext[] normalIntentString() { return GetRuleContexts(); } @@ -1346,62 +1421,68 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NormalIntentBodyContext normalIntentBody() { NormalIntentBodyContext _localctx = new NormalIntentBodyContext(Context, State); - EnterRule(_localctx, 30, RULE_normalIntentBody); + EnterRule(_localctx, 32, RULE_normalIntentBody); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 240; + State = 247; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,18,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,19,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 237; + State = 244; Match(WS); } } } - State = 242; + State = 249; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,18,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,19,Context); } - State = 247; + State = 255; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 247; + State = 255; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,19,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,20,Context) ) { case 1: { { - State = 243; + State = 250; normalIntentString(); - State = 244; + State = 251; newline(); } } break; case 2: { - State = 246; + State = 253; errorString(); } break; + case 3: + { + State = 254; + commentDefinition(); + } + break; } } break; default: throw new NoViableAltException(this); } - State = 249; + State = 257; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,20,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,21,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -1460,36 +1541,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NormalIntentStringContext normalIntentString() { NormalIntentStringContext _localctx = new NormalIntentStringContext(Context, State); - EnterRule(_localctx, 32, RULE_normalIntentString); + EnterRule(_localctx, 34, RULE_normalIntentString); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 254; + State = 262; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 251; + State = 259; Match(WS); } } - State = 256; + State = 264; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 257; + State = 265; Match(DASH); - State = 261; + State = 269; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,22,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 258; + State = 266; _la = TokenStream.LA(1); if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 15032385538L) != 0) ) { ErrorHandler.RecoverInline(this); @@ -1501,9 +1582,9 @@ public NormalIntentStringContext normalIntentString() { } } } - State = 263; + State = 271; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,22,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); } } } @@ -1548,11 +1629,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntitySectionContext newEntitySection() { NewEntitySectionContext _localctx = new NewEntitySectionContext(Context, State); - EnterRule(_localctx, 34, RULE_newEntitySection); + EnterRule(_localctx, 36, RULE_newEntitySection); try { EnterOuterAlt(_localctx, 1); { - State = 264; + State = 272; newEntityDefinition(); } } @@ -1600,18 +1681,18 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityDefinitionContext newEntityDefinition() { NewEntityDefinitionContext _localctx = new NewEntityDefinitionContext(Context, State); - EnterRule(_localctx, 36, RULE_newEntityDefinition); + EnterRule(_localctx, 38, RULE_newEntityDefinition); try { EnterOuterAlt(_localctx, 1); { - State = 266; + State = 274; newEntityLine(); - State = 268; + State = 276; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,23,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { case 1: { - State = 267; + State = 275; newEntityListbody(); } break; @@ -1674,34 +1755,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityListbodyContext newEntityListbody() { NewEntityListbodyContext _localctx = new NewEntityListbodyContext(Context, State); - EnterRule(_localctx, 38, RULE_newEntityListbody); + EnterRule(_localctx, 40, RULE_newEntityListbody); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 274; + State = 282; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 274; + State = 282; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,25,Context) ) { case 1: { { - State = 270; + State = 278; normalItemString(); - State = 271; + State = 279; newline(); } } break; case 2: { - State = 273; + State = 281; errorString(); } break; @@ -1711,9 +1792,9 @@ public NewEntityListbodyContext newEntityListbody() { default: throw new NoViableAltException(this); } - State = 276; + State = 284; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,25,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -1785,192 +1866,192 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityLineContext newEntityLine() { NewEntityLineContext _localctx = new NewEntityLineContext(Context, State); - EnterRule(_localctx, 40, RULE_newEntityLine); + EnterRule(_localctx, 42, RULE_newEntityLine); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 281; + State = 289; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 278; + State = 286; Match(WS); } } - State = 283; + State = 291; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 284; + State = 292; Match(AT); - State = 288; + State = 296; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,27,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 285; + State = 293; Match(WS); } } } - State = 290; + State = 298; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,27,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); } - State = 292; + State = 300; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==NEW_ENTITY_TYPE_IDENTIFIER) { { - State = 291; + State = 299; newEntityType(); } } - State = 297; + State = 305; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,29,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,30,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 294; + State = 302; Match(WS); } } } - State = 299; + State = 307; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,29,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,30,Context); } - State = 302; + State = 310; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,30,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,31,Context) ) { case 1: { - State = 300; + State = 308; newEntityName(); } break; case 2: { - State = 301; + State = 309; newEntityNameWithWS(); } break; } - State = 307; + State = 315; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,32,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 304; + State = 312; Match(WS); } } } - State = 309; + State = 317; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,32,Context); } - State = 311; + State = 319; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,32,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,33,Context) ) { case 1: { - State = 310; + State = 318; newEntityRoles(); } break; } - State = 316; + State = 324; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,33,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,34,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 313; + State = 321; Match(WS); } } } - State = 318; + State = 326; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,33,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,34,Context); } - State = 320; + State = 328; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==HAS_FEATURES_LABEL) { { - State = 319; + State = 327; newEntityUsesFeatures(); } } - State = 325; + State = 333; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,35,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,36,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 322; + State = 330; Match(WS); } } } - State = 327; + State = 335; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,35,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,36,Context); } - State = 329; + State = 337; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==EQUAL) { { - State = 328; + State = 336; Match(EQUAL); } } - State = 334; + State = 342; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,38,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 331; + State = 339; Match(WS); } } } - State = 336; + State = 344; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,38,Context); } - State = 339; + State = 347; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case NEW_COMPOSITE_ENTITY: { - State = 337; + State = 345; newCompositeDefinition(); } break; case NEW_REGEX_ENTITY: { - State = 338; + State = 346; newRegexDefinition(); } break; @@ -1981,7 +2062,7 @@ public NewEntityLineContext newEntityLine() { default: break; } - State = 341; + State = 349; newline(); } } @@ -2024,11 +2105,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewCompositeDefinitionContext newCompositeDefinition() { NewCompositeDefinitionContext _localctx = new NewCompositeDefinitionContext(Context, State); - EnterRule(_localctx, 42, RULE_newCompositeDefinition); + EnterRule(_localctx, 44, RULE_newCompositeDefinition); try { EnterOuterAlt(_localctx, 1); { - State = 343; + State = 351; Match(NEW_COMPOSITE_ENTITY); } } @@ -2071,11 +2152,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewRegexDefinitionContext newRegexDefinition() { NewRegexDefinitionContext _localctx = new NewRegexDefinitionContext(Context, State); - EnterRule(_localctx, 44, RULE_newRegexDefinition); + EnterRule(_localctx, 46, RULE_newRegexDefinition); try { EnterOuterAlt(_localctx, 1); { - State = 345; + State = 353; Match(NEW_REGEX_ENTITY); } } @@ -2118,11 +2199,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityTypeContext newEntityType() { NewEntityTypeContext _localctx = new NewEntityTypeContext(Context, State); - EnterRule(_localctx, 46, RULE_newEntityType); + EnterRule(_localctx, 48, RULE_newEntityType); try { EnterOuterAlt(_localctx, 1); { - State = 347; + State = 355; Match(NEW_ENTITY_TYPE_IDENTIFIER); } } @@ -2172,36 +2253,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityRolesContext newEntityRoles() { NewEntityRolesContext _localctx = new NewEntityRolesContext(Context, State); - EnterRule(_localctx, 48, RULE_newEntityRoles); + EnterRule(_localctx, 50, RULE_newEntityRoles); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 350; + State = 358; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==HAS_ROLES_LABEL) { { - State = 349; + State = 357; Match(HAS_ROLES_LABEL); } } - State = 355; + State = 363; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 352; + State = 360; Match(WS); } } - State = 357; + State = 365; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 358; + State = 366; newEntityRoleOrFeatures(); } } @@ -2251,28 +2332,28 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityUsesFeaturesContext newEntityUsesFeatures() { NewEntityUsesFeaturesContext _localctx = new NewEntityUsesFeaturesContext(Context, State); - EnterRule(_localctx, 50, RULE_newEntityUsesFeatures); + EnterRule(_localctx, 52, RULE_newEntityUsesFeatures); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 360; + State = 368; Match(HAS_FEATURES_LABEL); - State = 364; + State = 372; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 361; + State = 369; Match(WS); } } - State = 366; + State = 374; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 367; + State = 375; newEntityRoleOrFeatures(); } } @@ -2330,13 +2411,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityRoleOrFeaturesContext newEntityRoleOrFeatures() { NewEntityRoleOrFeaturesContext _localctx = new NewEntityRoleOrFeaturesContext(Context, State); - EnterRule(_localctx, 52, RULE_newEntityRoleOrFeatures); + EnterRule(_localctx, 54, RULE_newEntityRoleOrFeatures); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 369; + State = 377; _la = TokenStream.LA(1); if ( !(_la==NEW_ENTITY_IDENTIFIER || _la==NEW_ENTITY_IDENTIFIER_WITH_WS) ) { ErrorHandler.RecoverInline(this); @@ -2345,44 +2426,44 @@ public NewEntityRoleOrFeaturesContext newEntityRoleOrFeatures() { ErrorHandler.ReportMatch(this); Consume(); } - State = 386; + State = 394; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,44,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,45,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 373; + State = 381; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 370; + State = 378; Match(WS); } } - State = 375; + State = 383; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 376; + State = 384; Match(COMMA); - State = 380; + State = 388; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 377; + State = 385; Match(WS); } } - State = 382; + State = 390; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 383; + State = 391; _la = TokenStream.LA(1); if ( !(_la==NEW_ENTITY_IDENTIFIER || _la==NEW_ENTITY_IDENTIFIER_WITH_WS) ) { ErrorHandler.RecoverInline(this); @@ -2394,9 +2475,9 @@ public NewEntityRoleOrFeaturesContext newEntityRoleOrFeatures() { } } } - State = 388; + State = 396; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,44,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,45,Context); } } } @@ -2444,33 +2525,33 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityNameContext newEntityName() { NewEntityNameContext _localctx = new NewEntityNameContext(Context, State); - EnterRule(_localctx, 54, RULE_newEntityName); + EnterRule(_localctx, 56, RULE_newEntityName); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 389; - Match(NEW_ENTITY_IDENTIFIER); State = 397; + Match(NEW_ENTITY_IDENTIFIER); + State = 405; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,46,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,47,Context) ) { case 1: { - State = 393; + State = 401; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 390; + State = 398; Match(WS); } } - State = 395; + State = 403; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 396; + State = 404; Match(PHRASE_LIST_LABEL); } break; @@ -2521,33 +2602,33 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NewEntityNameWithWSContext newEntityNameWithWS() { NewEntityNameWithWSContext _localctx = new NewEntityNameWithWSContext(Context, State); - EnterRule(_localctx, 56, RULE_newEntityNameWithWS); + EnterRule(_localctx, 58, RULE_newEntityNameWithWS); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 399; - Match(NEW_ENTITY_IDENTIFIER_WITH_WS); State = 407; + Match(NEW_ENTITY_IDENTIFIER_WITH_WS); + State = 415; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,48,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,49,Context) ) { case 1: { - State = 403; + State = 411; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 400; + State = 408; Match(WS); } } - State = 405; + State = 413; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 406; + State = 414; Match(PHRASE_LIST_LABEL); } break; @@ -2595,11 +2676,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EntitySectionContext entitySection() { EntitySectionContext _localctx = new EntitySectionContext(Context, State); - EnterRule(_localctx, 58, RULE_entitySection); + EnterRule(_localctx, 60, RULE_entitySection); try { EnterOuterAlt(_localctx, 1); { - State = 409; + State = 417; entityDefinition(); } } @@ -2647,18 +2728,18 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EntityDefinitionContext entityDefinition() { EntityDefinitionContext _localctx = new EntityDefinitionContext(Context, State); - EnterRule(_localctx, 60, RULE_entityDefinition); + EnterRule(_localctx, 62, RULE_entityDefinition); try { EnterOuterAlt(_localctx, 1); { - State = 411; + State = 419; entityLine(); - State = 413; + State = 421; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,49,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,50,Context) ) { case 1: { - State = 412; + State = 420; entityListBody(); } break; @@ -2715,53 +2796,53 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EntityLineContext entityLine() { EntityLineContext _localctx = new EntityLineContext(Context, State); - EnterRule(_localctx, 62, RULE_entityLine); + EnterRule(_localctx, 64, RULE_entityLine); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 418; + State = 426; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 415; + State = 423; Match(WS); } } - State = 420; + State = 428; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 421; + State = 429; Match(DOLLAR); - State = 423; + State = 431; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,51,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,52,Context) ) { case 1: { - State = 422; + State = 430; entityName(); } break; } - State = 426; + State = 434; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,52,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,53,Context) ) { case 1: { - State = 425; + State = 433; Match(COLON_MARK); } break; } - State = 429; + State = 437; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,53,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,54,Context) ) { case 1: { - State = 428; + State = 436; entityType(); } break; @@ -2814,13 +2895,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EntityNameContext entityName() { EntityNameContext _localctx = new EntityNameContext(Context, State); - EnterRule(_localctx, 64, RULE_entityName); + EnterRule(_localctx, 66, RULE_entityName); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 432; + State = 440; ErrorHandler.Sync(this); _alt = 1; do { @@ -2828,7 +2909,7 @@ public EntityNameContext entityName() { case 1: { { - State = 431; + State = 439; _la = TokenStream.LA(1); if ( !(_la==WS || _la==ENTITY_TEXT) ) { ErrorHandler.RecoverInline(this); @@ -2843,9 +2924,9 @@ public EntityNameContext entityName() { default: throw new NoViableAltException(this); } - State = 434; + State = 442; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,54,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,55,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -2911,48 +2992,48 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EntityTypeContext entityType() { EntityTypeContext _localctx = new EntityTypeContext(Context, State); - EnterRule(_localctx, 66, RULE_entityType); + EnterRule(_localctx, 68, RULE_entityType); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 441; + State = 449; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 441; + State = 449; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case COMPOSITE_ENTITY: { - State = 436; + State = 444; compositeEntityIdentifier(); } break; case REGEX_ENTITY: { - State = 437; + State = 445; regexEntityIdentifier(); } break; case ENTITY_TEXT: { - State = 438; + State = 446; Match(ENTITY_TEXT); } break; case COLON_MARK: { - State = 439; + State = 447; Match(COLON_MARK); } break; case WS: { - State = 440; + State = 448; Match(WS); } break; @@ -2964,9 +3045,9 @@ public EntityTypeContext entityType() { default: throw new NoViableAltException(this); } - State = 443; + State = 451; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,56,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,57,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -3009,11 +3090,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CompositeEntityIdentifierContext compositeEntityIdentifier() { CompositeEntityIdentifierContext _localctx = new CompositeEntityIdentifierContext(Context, State); - EnterRule(_localctx, 68, RULE_compositeEntityIdentifier); + EnterRule(_localctx, 70, RULE_compositeEntityIdentifier); try { EnterOuterAlt(_localctx, 1); { - State = 445; + State = 453; Match(COMPOSITE_ENTITY); } } @@ -3056,11 +3137,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public RegexEntityIdentifierContext regexEntityIdentifier() { RegexEntityIdentifierContext _localctx = new RegexEntityIdentifierContext(Context, State); - EnterRule(_localctx, 70, RULE_regexEntityIdentifier); + EnterRule(_localctx, 72, RULE_regexEntityIdentifier); try { EnterOuterAlt(_localctx, 1); { - State = 447; + State = 455; Match(REGEX_ENTITY); } } @@ -3120,34 +3201,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EntityListBodyContext entityListBody() { EntityListBodyContext _localctx = new EntityListBodyContext(Context, State); - EnterRule(_localctx, 72, RULE_entityListBody); + EnterRule(_localctx, 74, RULE_entityListBody); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 453; + State = 461; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 453; + State = 461; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,57,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,58,Context) ) { case 1: { { - State = 449; + State = 457; normalItemString(); - State = 450; + State = 458; newline(); } } break; case 2: { - State = 452; + State = 460; errorString(); } break; @@ -3157,9 +3238,9 @@ public EntityListBodyContext entityListBody() { default: throw new NoViableAltException(this); } - State = 455; + State = 463; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,58,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,59,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -3218,36 +3299,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NormalItemStringContext normalItemString() { NormalItemStringContext _localctx = new NormalItemStringContext(Context, State); - EnterRule(_localctx, 74, RULE_normalItemString); + EnterRule(_localctx, 76, RULE_normalItemString); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 460; + State = 468; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 457; + State = 465; Match(WS); } } - State = 462; + State = 470; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 463; + State = 471; Match(DASH); - State = 467; + State = 475; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,60,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,61,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 464; + State = 472; _la = TokenStream.LA(1); if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 15032385538L) != 0) ) { ErrorHandler.RecoverInline(this); @@ -3259,9 +3340,9 @@ public NormalItemStringContext normalItemString() { } } } - State = 469; + State = 477; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,60,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,61,Context); } } } @@ -3306,11 +3387,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ImportSectionContext importSection() { ImportSectionContext _localctx = new ImportSectionContext(Context, State); - EnterRule(_localctx, 76, RULE_importSection); + EnterRule(_localctx, 78, RULE_importSection); try { EnterOuterAlt(_localctx, 1); { - State = 470; + State = 478; importDefinition(); } } @@ -3357,43 +3438,43 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ImportDefinitionContext importDefinition() { ImportDefinitionContext _localctx = new ImportDefinitionContext(Context, State); - EnterRule(_localctx, 78, RULE_importDefinition); + EnterRule(_localctx, 80, RULE_importDefinition); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 475; + State = 483; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 472; + State = 480; Match(WS); } } - State = 477; + State = 485; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 478; + State = 486; Match(IMPORT); - State = 482; + State = 490; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,62,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 479; + State = 487; Match(WS); } } } - State = 484; + State = 492; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,62,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); } } } @@ -3438,11 +3519,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ReferenceSectionContext referenceSection() { ReferenceSectionContext _localctx = new ReferenceSectionContext(Context, State); - EnterRule(_localctx, 80, RULE_referenceSection); + EnterRule(_localctx, 82, RULE_referenceSection); try { EnterOuterAlt(_localctx, 1); { - State = 485; + State = 493; referenceDefinition(); } } @@ -3489,43 +3570,43 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ReferenceDefinitionContext referenceDefinition() { ReferenceDefinitionContext _localctx = new ReferenceDefinitionContext(Context, State); - EnterRule(_localctx, 82, RULE_referenceDefinition); + EnterRule(_localctx, 84, RULE_referenceDefinition); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 490; + State = 498; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 487; + State = 495; Match(WS); } } - State = 492; + State = 500; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 493; + State = 501; Match(REFERENCE); - State = 497; + State = 505; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,64,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,65,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 494; + State = 502; Match(WS); } } } - State = 499; + State = 507; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,64,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,65,Context); } } } @@ -3570,11 +3651,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QnaSectionContext qnaSection() { QnaSectionContext _localctx = new QnaSectionContext(Context, State); - EnterRule(_localctx, 84, RULE_qnaSection); + EnterRule(_localctx, 86, RULE_qnaSection); try { EnterOuterAlt(_localctx, 1); { - State = 500; + State = 508; qnaDefinition(); } } @@ -3634,42 +3715,42 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QnaDefinitionContext qnaDefinition() { QnaDefinitionContext _localctx = new QnaDefinitionContext(Context, State); - EnterRule(_localctx, 86, RULE_qnaDefinition); + EnterRule(_localctx, 88, RULE_qnaDefinition); try { EnterOuterAlt(_localctx, 1); { - State = 503; + State = 511; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,65,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,66,Context) ) { case 1: { - State = 502; + State = 510; qnaSourceInfo(); } break; } - State = 506; + State = 514; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,66,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,67,Context) ) { case 1: { - State = 505; + State = 513; qnaIdMark(); } break; } - State = 508; + State = 516; qnaQuestion(); - State = 509; + State = 517; moreQuestionsBody(); - State = 510; + State = 518; qnaAnswerBody(); - State = 512; + State = 520; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,67,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,68,Context) ) { case 1: { - State = 511; + State = 519; promptSection(); } break; @@ -3719,26 +3800,26 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QnaSourceInfoContext qnaSourceInfo() { QnaSourceInfoContext _localctx = new QnaSourceInfoContext(Context, State); - EnterRule(_localctx, 88, RULE_qnaSourceInfo); + EnterRule(_localctx, 90, RULE_qnaSourceInfo); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 517; + State = 525; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 514; + State = 522; Match(WS); } } - State = 519; + State = 527; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 520; + State = 528; Match(QNA_SOURCE_INFO); } } @@ -3785,26 +3866,26 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QnaIdMarkContext qnaIdMark() { QnaIdMarkContext _localctx = new QnaIdMarkContext(Context, State); - EnterRule(_localctx, 90, RULE_qnaIdMark); + EnterRule(_localctx, 92, RULE_qnaIdMark); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 525; + State = 533; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 522; + State = 530; Match(WS); } } - State = 527; + State = 535; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 528; + State = 536; Match(QNA_ID_MARK); } } @@ -3854,28 +3935,28 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QnaQuestionContext qnaQuestion() { QnaQuestionContext _localctx = new QnaQuestionContext(Context, State); - EnterRule(_localctx, 92, RULE_qnaQuestion); + EnterRule(_localctx, 94, RULE_qnaQuestion); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 533; + State = 541; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 530; + State = 538; Match(WS); } } - State = 535; + State = 543; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 536; + State = 544; Match(QNA); - State = 537; + State = 545; questionText(); } } @@ -3921,22 +4002,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QuestionTextContext questionText() { QuestionTextContext _localctx = new QuestionTextContext(Context, State); - EnterRule(_localctx, 94, RULE_questionText); + EnterRule(_localctx, 96, RULE_questionText); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 542; + State = 550; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==QNA_TEXT) { { { - State = 539; + State = 547; Match(QNA_TEXT); } } - State = 544; + State = 552; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -4002,42 +4083,42 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MoreQuestionsBodyContext moreQuestionsBody() { MoreQuestionsBodyContext _localctx = new MoreQuestionsBodyContext(Context, State); - EnterRule(_localctx, 96, RULE_moreQuestionsBody); + EnterRule(_localctx, 98, RULE_moreQuestionsBody); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 548; + State = 556; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,72,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,73,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 545; + State = 553; Match(WS); } } } - State = 550; + State = 558; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,72,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,73,Context); } - State = 557; + State = 565; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,74,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 555; + State = 563; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case DASH: { { - State = 551; + State = 559; moreQuestion(); - State = 552; + State = 560; newline(); } } @@ -4045,7 +4126,7 @@ public MoreQuestionsBodyContext moreQuestionsBody() { case WS: case INVALID_TOKEN_DEFAULT_MODE: { - State = 554; + State = 562; errorQuestionString(); } break; @@ -4054,9 +4135,9 @@ public MoreQuestionsBodyContext moreQuestionsBody() { } } } - State = 559; + State = 567; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,74,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); } } } @@ -4107,22 +4188,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MoreQuestionContext moreQuestion() { MoreQuestionContext _localctx = new MoreQuestionContext(Context, State); - EnterRule(_localctx, 98, RULE_moreQuestion); + EnterRule(_localctx, 100, RULE_moreQuestion); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 560; + State = 568; Match(DASH); - State = 564; + State = 572; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,76,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 561; + State = 569; _la = TokenStream.LA(1); if ( !(_la==WS || _la==TEXT) ) { ErrorHandler.RecoverInline(this); @@ -4134,9 +4215,9 @@ public MoreQuestionContext moreQuestion() { } } } - State = 566; + State = 574; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,76,Context); } } } @@ -4186,13 +4267,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ErrorQuestionStringContext errorQuestionString() { ErrorQuestionStringContext _localctx = new ErrorQuestionStringContext(Context, State); - EnterRule(_localctx, 100, RULE_errorQuestionString); + EnterRule(_localctx, 102, RULE_errorQuestionString); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 568; + State = 576; ErrorHandler.Sync(this); _alt = 1; do { @@ -4200,7 +4281,7 @@ public ErrorQuestionStringContext errorQuestionString() { case 1: { { - State = 567; + State = 575; _la = TokenStream.LA(1); if ( !(_la==WS || _la==INVALID_TOKEN_DEFAULT_MODE) ) { ErrorHandler.RecoverInline(this); @@ -4215,9 +4296,9 @@ public ErrorQuestionStringContext errorQuestionString() { default: throw new NoViableAltException(this); } - State = 570; + State = 578; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,76,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,77,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4265,27 +4346,27 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public QnaAnswerBodyContext qnaAnswerBody() { QnaAnswerBodyContext _localctx = new QnaAnswerBodyContext(Context, State); - EnterRule(_localctx, 102, RULE_qnaAnswerBody); + EnterRule(_localctx, 104, RULE_qnaAnswerBody); try { EnterOuterAlt(_localctx, 1); { - State = 580; + State = 588; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,79,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,80,Context) ) { case 1: { { - State = 573; + State = 581; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,77,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,78,Context) ) { case 1: { - State = 572; + State = 580; filterSection(); } break; } - State = 575; + State = 583; multiLineAnswer(); } } @@ -4293,14 +4374,14 @@ public QnaAnswerBodyContext qnaAnswerBody() { case 2: { { - State = 576; + State = 584; multiLineAnswer(); - State = 578; + State = 586; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,78,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,79,Context) ) { case 1: { - State = 577; + State = 585; filterSection(); } break; @@ -4366,47 +4447,47 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FilterSectionContext filterSection() { FilterSectionContext _localctx = new FilterSectionContext(Context, State); - EnterRule(_localctx, 104, RULE_filterSection); + EnterRule(_localctx, 106, RULE_filterSection); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 585; + State = 593; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 582; + State = 590; Match(WS); } } - State = 587; + State = 595; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 588; + State = 596; Match(FILTER_MARK); - State = 591; + State = 599; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 591; + State = 599; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,81,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,82,Context) ) { case 1: { - State = 589; + State = 597; filterLine(); } break; case 2: { - State = 590; + State = 598; errorFilterLine(); } break; @@ -4416,9 +4497,9 @@ public FilterSectionContext filterSection() { default: throw new NoViableAltException(this); } - State = 593; + State = 601; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,82,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,83,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4477,47 +4558,47 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PromptSectionContext promptSection() { PromptSectionContext _localctx = new PromptSectionContext(Context, State); - EnterRule(_localctx, 106, RULE_promptSection); + EnterRule(_localctx, 108, RULE_promptSection); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 598; + State = 606; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 595; + State = 603; Match(WS); } } - State = 600; + State = 608; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 601; + State = 609; Match(PROMPT_MARK); - State = 604; + State = 612; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 604; + State = 612; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,84,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,85,Context) ) { case 1: { - State = 602; + State = 610; filterLine(); } break; case 2: { - State = 603; + State = 611; errorFilterLine(); } break; @@ -4527,9 +4608,9 @@ public PromptSectionContext promptSection() { default: throw new NoViableAltException(this); } - State = 606; + State = 614; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,85,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,86,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4583,36 +4664,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FilterLineContext filterLine() { FilterLineContext _localctx = new FilterLineContext(Context, State); - EnterRule(_localctx, 108, RULE_filterLine); + EnterRule(_localctx, 110, RULE_filterLine); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 611; + State = 619; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 608; + State = 616; Match(WS); } } - State = 613; + State = 621; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 614; + State = 622; Match(DASH); - State = 618; + State = 626; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,87,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 615; + State = 623; _la = TokenStream.LA(1); if ( !(_la==WS || _la==TEXT) ) { ErrorHandler.RecoverInline(this); @@ -4624,11 +4705,11 @@ public FilterLineContext filterLine() { } } } - State = 620; + State = 628; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,87,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); } - State = 621; + State = 629; newline(); } } @@ -4678,13 +4759,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ErrorFilterLineContext errorFilterLine() { ErrorFilterLineContext _localctx = new ErrorFilterLineContext(Context, State); - EnterRule(_localctx, 110, RULE_errorFilterLine); + EnterRule(_localctx, 112, RULE_errorFilterLine); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 624; + State = 632; ErrorHandler.Sync(this); _alt = 1; do { @@ -4692,7 +4773,7 @@ public ErrorFilterLineContext errorFilterLine() { case 1: { { - State = 623; + State = 631; _la = TokenStream.LA(1); if ( !(_la==WS || _la==INVALID_TOKEN_DEFAULT_MODE) ) { ErrorHandler.RecoverInline(this); @@ -4707,9 +4788,9 @@ public ErrorFilterLineContext errorFilterLine() { default: throw new NoViableAltException(this); } - State = 626; + State = 634; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,89,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4756,26 +4837,26 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MultiLineAnswerContext multiLineAnswer() { MultiLineAnswerContext _localctx = new MultiLineAnswerContext(Context, State); - EnterRule(_localctx, 112, RULE_multiLineAnswer); + EnterRule(_localctx, 114, RULE_multiLineAnswer); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 631; + State = 639; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 628; + State = 636; Match(WS); } } - State = 633; + State = 641; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 634; + State = 642; Match(MULTI_LINE_TEXT); } } @@ -4820,11 +4901,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ModelInfoSectionContext modelInfoSection() { ModelInfoSectionContext _localctx = new ModelInfoSectionContext(Context, State); - EnterRule(_localctx, 114, RULE_modelInfoSection); + EnterRule(_localctx, 116, RULE_modelInfoSection); try { EnterOuterAlt(_localctx, 1); { - State = 636; + State = 644; modelInfoDefinition(); } } @@ -4871,26 +4952,26 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ModelInfoDefinitionContext modelInfoDefinition() { ModelInfoDefinitionContext _localctx = new ModelInfoDefinitionContext(Context, State); - EnterRule(_localctx, 116, RULE_modelInfoDefinition); + EnterRule(_localctx, 118, RULE_modelInfoDefinition); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 641; + State = 649; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 638; + State = 646; Match(WS); } } - State = 643; + State = 651; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 644; + State = 652; Match(MODEL_INFO); } } @@ -4906,7 +4987,7 @@ public ModelInfoDefinitionContext modelInfoDefinition() { } private static int[] _serializedATN = { - 4,1,40,647,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7, + 4,1,40,655,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7, 7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14, 2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21, 2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7,28, @@ -4914,218 +4995,221 @@ public ModelInfoDefinitionContext modelInfoDefinition() { 2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42, 2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49, 2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56, - 2,57,7,57,2,58,7,58,1,0,4,0,120,8,0,11,0,12,0,121,1,0,1,0,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,3,1,135,8,1,1,2,5,2,138,8,2,10,2,12,2,141,9,2, - 1,2,1,2,1,3,4,3,146,8,3,11,3,12,3,147,1,4,1,4,1,4,1,5,5,5,154,8,5,10,5, - 12,5,157,9,5,1,5,1,5,5,5,161,8,5,10,5,12,5,164,9,5,1,5,1,5,1,6,1,6,1,6, - 5,6,171,8,6,10,6,12,6,174,9,6,1,7,1,7,1,7,5,7,179,8,7,10,7,12,7,182,9, - 7,1,8,4,8,185,8,8,11,8,12,8,186,1,9,5,9,190,8,9,10,9,12,9,193,9,9,1,9, - 1,9,1,9,1,10,1,10,1,11,1,11,3,11,202,8,11,1,12,5,12,205,8,12,10,12,12, - 12,208,9,12,1,12,1,12,3,12,212,8,12,1,12,5,12,215,8,12,10,12,12,12,218, - 9,12,1,12,1,12,1,13,1,13,1,13,5,13,225,8,13,10,13,12,13,228,9,13,1,14, - 5,14,231,8,14,10,14,12,14,234,9,14,1,14,1,14,1,15,5,15,239,8,15,10,15, - 12,15,242,9,15,1,15,1,15,1,15,1,15,4,15,248,8,15,11,15,12,15,249,1,16, - 5,16,253,8,16,10,16,12,16,256,9,16,1,16,1,16,5,16,260,8,16,10,16,12,16, - 263,9,16,1,17,1,17,1,18,1,18,3,18,269,8,18,1,19,1,19,1,19,1,19,4,19,275, - 8,19,11,19,12,19,276,1,20,5,20,280,8,20,10,20,12,20,283,9,20,1,20,1,20, - 5,20,287,8,20,10,20,12,20,290,9,20,1,20,3,20,293,8,20,1,20,5,20,296,8, - 20,10,20,12,20,299,9,20,1,20,1,20,3,20,303,8,20,1,20,5,20,306,8,20,10, - 20,12,20,309,9,20,1,20,3,20,312,8,20,1,20,5,20,315,8,20,10,20,12,20,318, - 9,20,1,20,3,20,321,8,20,1,20,5,20,324,8,20,10,20,12,20,327,9,20,1,20,3, - 20,330,8,20,1,20,5,20,333,8,20,10,20,12,20,336,9,20,1,20,1,20,3,20,340, - 8,20,1,20,1,20,1,21,1,21,1,22,1,22,1,23,1,23,1,24,3,24,351,8,24,1,24,5, - 24,354,8,24,10,24,12,24,357,9,24,1,24,1,24,1,25,1,25,5,25,363,8,25,10, - 25,12,25,366,9,25,1,25,1,25,1,26,1,26,5,26,372,8,26,10,26,12,26,375,9, - 26,1,26,1,26,5,26,379,8,26,10,26,12,26,382,9,26,1,26,5,26,385,8,26,10, - 26,12,26,388,9,26,1,27,1,27,5,27,392,8,27,10,27,12,27,395,9,27,1,27,3, - 27,398,8,27,1,28,1,28,5,28,402,8,28,10,28,12,28,405,9,28,1,28,3,28,408, - 8,28,1,29,1,29,1,30,1,30,3,30,414,8,30,1,31,5,31,417,8,31,10,31,12,31, - 420,9,31,1,31,1,31,3,31,424,8,31,1,31,3,31,427,8,31,1,31,3,31,430,8,31, - 1,32,4,32,433,8,32,11,32,12,32,434,1,33,1,33,1,33,1,33,1,33,4,33,442,8, - 33,11,33,12,33,443,1,34,1,34,1,35,1,35,1,36,1,36,1,36,1,36,4,36,454,8, - 36,11,36,12,36,455,1,37,5,37,459,8,37,10,37,12,37,462,9,37,1,37,1,37,5, - 37,466,8,37,10,37,12,37,469,9,37,1,38,1,38,1,39,5,39,474,8,39,10,39,12, - 39,477,9,39,1,39,1,39,5,39,481,8,39,10,39,12,39,484,9,39,1,40,1,40,1,41, - 5,41,489,8,41,10,41,12,41,492,9,41,1,41,1,41,5,41,496,8,41,10,41,12,41, - 499,9,41,1,42,1,42,1,43,3,43,504,8,43,1,43,3,43,507,8,43,1,43,1,43,1,43, - 1,43,3,43,513,8,43,1,44,5,44,516,8,44,10,44,12,44,519,9,44,1,44,1,44,1, - 45,5,45,524,8,45,10,45,12,45,527,9,45,1,45,1,45,1,46,5,46,532,8,46,10, - 46,12,46,535,9,46,1,46,1,46,1,46,1,47,5,47,541,8,47,10,47,12,47,544,9, - 47,1,48,5,48,547,8,48,10,48,12,48,550,9,48,1,48,1,48,1,48,1,48,5,48,556, - 8,48,10,48,12,48,559,9,48,1,49,1,49,5,49,563,8,49,10,49,12,49,566,9,49, - 1,50,4,50,569,8,50,11,50,12,50,570,1,51,3,51,574,8,51,1,51,1,51,1,51,3, - 51,579,8,51,3,51,581,8,51,1,52,5,52,584,8,52,10,52,12,52,587,9,52,1,52, - 1,52,1,52,4,52,592,8,52,11,52,12,52,593,1,53,5,53,597,8,53,10,53,12,53, - 600,9,53,1,53,1,53,1,53,4,53,605,8,53,11,53,12,53,606,1,54,5,54,610,8, - 54,10,54,12,54,613,9,54,1,54,1,54,5,54,617,8,54,10,54,12,54,620,9,54,1, - 54,1,54,1,55,4,55,625,8,55,11,55,12,55,626,1,56,5,56,630,8,56,10,56,12, - 56,633,9,56,1,56,1,56,1,57,1,57,1,58,5,58,640,8,58,10,58,12,58,643,9,58, - 1,58,1,58,1,58,1,121,0,59,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32, - 34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80, - 82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,0,6,1,1, - 2,2,2,0,1,1,17,17,2,0,1,1,31,33,1,0,26,27,2,0,1,1,37,37,2,0,1,1,33,33, - 690,0,119,1,0,0,0,2,134,1,0,0,0,4,139,1,0,0,0,6,145,1,0,0,0,8,149,1,0, - 0,0,10,155,1,0,0,0,12,167,1,0,0,0,14,175,1,0,0,0,16,184,1,0,0,0,18,191, - 1,0,0,0,20,197,1,0,0,0,22,199,1,0,0,0,24,206,1,0,0,0,26,221,1,0,0,0,28, - 232,1,0,0,0,30,240,1,0,0,0,32,254,1,0,0,0,34,264,1,0,0,0,36,266,1,0,0, - 0,38,274,1,0,0,0,40,281,1,0,0,0,42,343,1,0,0,0,44,345,1,0,0,0,46,347,1, - 0,0,0,48,350,1,0,0,0,50,360,1,0,0,0,52,369,1,0,0,0,54,389,1,0,0,0,56,399, - 1,0,0,0,58,409,1,0,0,0,60,411,1,0,0,0,62,418,1,0,0,0,64,432,1,0,0,0,66, - 441,1,0,0,0,68,445,1,0,0,0,70,447,1,0,0,0,72,453,1,0,0,0,74,460,1,0,0, - 0,76,470,1,0,0,0,78,475,1,0,0,0,80,485,1,0,0,0,82,490,1,0,0,0,84,500,1, - 0,0,0,86,503,1,0,0,0,88,517,1,0,0,0,90,525,1,0,0,0,92,533,1,0,0,0,94,542, - 1,0,0,0,96,548,1,0,0,0,98,560,1,0,0,0,100,568,1,0,0,0,102,580,1,0,0,0, - 104,585,1,0,0,0,106,598,1,0,0,0,108,611,1,0,0,0,110,624,1,0,0,0,112,631, - 1,0,0,0,114,636,1,0,0,0,116,641,1,0,0,0,118,120,3,2,1,0,119,118,1,0,0, - 0,120,121,1,0,0,0,121,122,1,0,0,0,121,119,1,0,0,0,122,123,1,0,0,0,123, - 124,5,0,0,1,124,1,1,0,0,0,125,135,5,2,0,0,126,135,3,8,4,0,127,135,3,20, - 10,0,128,135,3,58,29,0,129,135,3,34,17,0,130,135,3,76,38,0,131,135,3,80, - 40,0,132,135,3,84,42,0,133,135,3,114,57,0,134,125,1,0,0,0,134,126,1,0, - 0,0,134,127,1,0,0,0,134,128,1,0,0,0,134,129,1,0,0,0,134,130,1,0,0,0,134, - 131,1,0,0,0,134,132,1,0,0,0,134,133,1,0,0,0,135,3,1,0,0,0,136,138,5,1, - 0,0,137,136,1,0,0,0,138,141,1,0,0,0,139,137,1,0,0,0,139,140,1,0,0,0,140, - 142,1,0,0,0,141,139,1,0,0,0,142,143,7,0,0,0,143,5,1,0,0,0,144,146,7,1, - 0,0,145,144,1,0,0,0,146,147,1,0,0,0,147,145,1,0,0,0,147,148,1,0,0,0,148, - 7,1,0,0,0,149,150,3,10,5,0,150,151,3,16,8,0,151,9,1,0,0,0,152,154,5,1, - 0,0,153,152,1,0,0,0,154,157,1,0,0,0,155,153,1,0,0,0,155,156,1,0,0,0,156, - 158,1,0,0,0,157,155,1,0,0,0,158,162,5,7,0,0,159,161,5,1,0,0,160,159,1, - 0,0,0,161,164,1,0,0,0,162,160,1,0,0,0,162,163,1,0,0,0,163,165,1,0,0,0, - 164,162,1,0,0,0,165,166,3,12,6,0,166,11,1,0,0,0,167,172,3,14,7,0,168,171, - 5,1,0,0,169,171,3,14,7,0,170,168,1,0,0,0,170,169,1,0,0,0,171,174,1,0,0, - 0,172,170,1,0,0,0,172,173,1,0,0,0,173,13,1,0,0,0,174,172,1,0,0,0,175,180, - 5,29,0,0,176,177,5,30,0,0,177,179,5,29,0,0,178,176,1,0,0,0,179,182,1,0, - 0,0,180,178,1,0,0,0,180,181,1,0,0,0,181,15,1,0,0,0,182,180,1,0,0,0,183, - 185,3,18,9,0,184,183,1,0,0,0,185,186,1,0,0,0,186,184,1,0,0,0,186,187,1, - 0,0,0,187,17,1,0,0,0,188,190,5,1,0,0,189,188,1,0,0,0,190,193,1,0,0,0,191, - 189,1,0,0,0,191,192,1,0,0,0,192,194,1,0,0,0,193,191,1,0,0,0,194,195,5, - 7,0,0,195,196,3,20,10,0,196,19,1,0,0,0,197,198,3,22,11,0,198,21,1,0,0, - 0,199,201,3,24,12,0,200,202,3,28,14,0,201,200,1,0,0,0,201,202,1,0,0,0, - 202,23,1,0,0,0,203,205,5,1,0,0,204,203,1,0,0,0,205,208,1,0,0,0,206,204, - 1,0,0,0,206,207,1,0,0,0,207,209,1,0,0,0,208,206,1,0,0,0,209,211,5,7,0, - 0,210,212,5,7,0,0,211,210,1,0,0,0,211,212,1,0,0,0,212,216,1,0,0,0,213, - 215,5,1,0,0,214,213,1,0,0,0,215,218,1,0,0,0,216,214,1,0,0,0,216,217,1, - 0,0,0,217,219,1,0,0,0,218,216,1,0,0,0,219,220,3,26,13,0,220,25,1,0,0,0, - 221,226,3,14,7,0,222,225,5,1,0,0,223,225,3,14,7,0,224,222,1,0,0,0,224, - 223,1,0,0,0,225,228,1,0,0,0,226,224,1,0,0,0,226,227,1,0,0,0,227,27,1,0, - 0,0,228,226,1,0,0,0,229,231,5,1,0,0,230,229,1,0,0,0,231,234,1,0,0,0,232, - 230,1,0,0,0,232,233,1,0,0,0,233,235,1,0,0,0,234,232,1,0,0,0,235,236,3, - 30,15,0,236,29,1,0,0,0,237,239,5,1,0,0,238,237,1,0,0,0,239,242,1,0,0,0, - 240,238,1,0,0,0,240,241,1,0,0,0,241,247,1,0,0,0,242,240,1,0,0,0,243,244, - 3,32,16,0,244,245,3,4,2,0,245,248,1,0,0,0,246,248,3,6,3,0,247,243,1,0, - 0,0,247,246,1,0,0,0,248,249,1,0,0,0,249,247,1,0,0,0,249,250,1,0,0,0,250, - 31,1,0,0,0,251,253,5,1,0,0,252,251,1,0,0,0,253,256,1,0,0,0,254,252,1,0, - 0,0,254,255,1,0,0,0,255,257,1,0,0,0,256,254,1,0,0,0,257,261,5,8,0,0,258, - 260,7,2,0,0,259,258,1,0,0,0,260,263,1,0,0,0,261,259,1,0,0,0,261,262,1, - 0,0,0,262,33,1,0,0,0,263,261,1,0,0,0,264,265,3,36,18,0,265,35,1,0,0,0, - 266,268,3,40,20,0,267,269,3,38,19,0,268,267,1,0,0,0,268,269,1,0,0,0,269, - 37,1,0,0,0,270,271,3,74,37,0,271,272,3,4,2,0,272,275,1,0,0,0,273,275,3, - 6,3,0,274,270,1,0,0,0,274,273,1,0,0,0,275,276,1,0,0,0,276,274,1,0,0,0, - 276,277,1,0,0,0,277,39,1,0,0,0,278,280,5,1,0,0,279,278,1,0,0,0,280,283, - 1,0,0,0,281,279,1,0,0,0,281,282,1,0,0,0,282,284,1,0,0,0,283,281,1,0,0, - 0,284,288,5,10,0,0,285,287,5,1,0,0,286,285,1,0,0,0,287,290,1,0,0,0,288, - 286,1,0,0,0,288,289,1,0,0,0,289,292,1,0,0,0,290,288,1,0,0,0,291,293,3, - 46,23,0,292,291,1,0,0,0,292,293,1,0,0,0,293,297,1,0,0,0,294,296,5,1,0, - 0,295,294,1,0,0,0,296,299,1,0,0,0,297,295,1,0,0,0,297,298,1,0,0,0,298, - 302,1,0,0,0,299,297,1,0,0,0,300,303,3,54,27,0,301,303,3,56,28,0,302,300, - 1,0,0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,307,1,0,0,0,304,306,5,1,0, - 0,305,304,1,0,0,0,306,309,1,0,0,0,307,305,1,0,0,0,307,308,1,0,0,0,308, - 311,1,0,0,0,309,307,1,0,0,0,310,312,3,48,24,0,311,310,1,0,0,0,311,312, - 1,0,0,0,312,316,1,0,0,0,313,315,5,1,0,0,314,313,1,0,0,0,315,318,1,0,0, - 0,316,314,1,0,0,0,316,317,1,0,0,0,317,320,1,0,0,0,318,316,1,0,0,0,319, - 321,3,50,25,0,320,319,1,0,0,0,320,321,1,0,0,0,321,325,1,0,0,0,322,324, - 5,1,0,0,323,322,1,0,0,0,324,327,1,0,0,0,325,323,1,0,0,0,325,326,1,0,0, - 0,326,329,1,0,0,0,327,325,1,0,0,0,328,330,5,18,0,0,329,328,1,0,0,0,329, - 330,1,0,0,0,330,334,1,0,0,0,331,333,5,1,0,0,332,331,1,0,0,0,333,336,1, - 0,0,0,334,332,1,0,0,0,334,335,1,0,0,0,335,339,1,0,0,0,336,334,1,0,0,0, - 337,340,3,42,21,0,338,340,3,44,22,0,339,337,1,0,0,0,339,338,1,0,0,0,339, - 340,1,0,0,0,340,341,1,0,0,0,341,342,3,4,2,0,342,41,1,0,0,0,343,344,5,24, - 0,0,344,43,1,0,0,0,345,346,5,25,0,0,346,45,1,0,0,0,347,348,5,22,0,0,348, - 47,1,0,0,0,349,351,5,20,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,355,1, - 0,0,0,352,354,5,1,0,0,353,352,1,0,0,0,354,357,1,0,0,0,355,353,1,0,0,0, - 355,356,1,0,0,0,356,358,1,0,0,0,357,355,1,0,0,0,358,359,3,52,26,0,359, - 49,1,0,0,0,360,364,5,21,0,0,361,363,5,1,0,0,362,361,1,0,0,0,363,366,1, - 0,0,0,364,362,1,0,0,0,364,365,1,0,0,0,365,367,1,0,0,0,366,364,1,0,0,0, - 367,368,3,52,26,0,368,51,1,0,0,0,369,386,7,3,0,0,370,372,5,1,0,0,371,370, - 1,0,0,0,372,375,1,0,0,0,373,371,1,0,0,0,373,374,1,0,0,0,374,376,1,0,0, - 0,375,373,1,0,0,0,376,380,5,19,0,0,377,379,5,1,0,0,378,377,1,0,0,0,379, - 382,1,0,0,0,380,378,1,0,0,0,380,381,1,0,0,0,381,383,1,0,0,0,382,380,1, - 0,0,0,383,385,7,3,0,0,384,373,1,0,0,0,385,388,1,0,0,0,386,384,1,0,0,0, - 386,387,1,0,0,0,387,53,1,0,0,0,388,386,1,0,0,0,389,397,5,26,0,0,390,392, - 5,1,0,0,391,390,1,0,0,0,392,395,1,0,0,0,393,391,1,0,0,0,393,394,1,0,0, - 0,394,396,1,0,0,0,395,393,1,0,0,0,396,398,5,23,0,0,397,393,1,0,0,0,397, - 398,1,0,0,0,398,55,1,0,0,0,399,407,5,27,0,0,400,402,5,1,0,0,401,400,1, - 0,0,0,402,405,1,0,0,0,403,401,1,0,0,0,403,404,1,0,0,0,404,406,1,0,0,0, - 405,403,1,0,0,0,406,408,5,23,0,0,407,403,1,0,0,0,407,408,1,0,0,0,408,57, - 1,0,0,0,409,410,3,60,30,0,410,59,1,0,0,0,411,413,3,62,31,0,412,414,3,72, - 36,0,413,412,1,0,0,0,413,414,1,0,0,0,414,61,1,0,0,0,415,417,5,1,0,0,416, - 415,1,0,0,0,417,420,1,0,0,0,418,416,1,0,0,0,418,419,1,0,0,0,419,421,1, - 0,0,0,420,418,1,0,0,0,421,423,5,9,0,0,422,424,3,64,32,0,423,422,1,0,0, - 0,423,424,1,0,0,0,424,426,1,0,0,0,425,427,5,38,0,0,426,425,1,0,0,0,426, - 427,1,0,0,0,427,429,1,0,0,0,428,430,3,66,33,0,429,428,1,0,0,0,429,430, - 1,0,0,0,430,63,1,0,0,0,431,433,7,4,0,0,432,431,1,0,0,0,433,434,1,0,0,0, - 434,432,1,0,0,0,434,435,1,0,0,0,435,65,1,0,0,0,436,442,3,68,34,0,437,442, - 3,70,35,0,438,442,5,37,0,0,439,442,5,38,0,0,440,442,5,1,0,0,441,436,1, - 0,0,0,441,437,1,0,0,0,441,438,1,0,0,0,441,439,1,0,0,0,441,440,1,0,0,0, - 442,443,1,0,0,0,443,441,1,0,0,0,443,444,1,0,0,0,444,67,1,0,0,0,445,446, - 5,35,0,0,446,69,1,0,0,0,447,448,5,36,0,0,448,71,1,0,0,0,449,450,3,74,37, - 0,450,451,3,4,2,0,451,454,1,0,0,0,452,454,3,6,3,0,453,449,1,0,0,0,453, - 452,1,0,0,0,454,455,1,0,0,0,455,453,1,0,0,0,455,456,1,0,0,0,456,73,1,0, - 0,0,457,459,5,1,0,0,458,457,1,0,0,0,459,462,1,0,0,0,460,458,1,0,0,0,460, - 461,1,0,0,0,461,463,1,0,0,0,462,460,1,0,0,0,463,467,5,8,0,0,464,466,7, - 2,0,0,465,464,1,0,0,0,466,469,1,0,0,0,467,465,1,0,0,0,467,468,1,0,0,0, - 468,75,1,0,0,0,469,467,1,0,0,0,470,471,3,78,39,0,471,77,1,0,0,0,472,474, - 5,1,0,0,473,472,1,0,0,0,474,477,1,0,0,0,475,473,1,0,0,0,475,476,1,0,0, - 0,476,478,1,0,0,0,477,475,1,0,0,0,478,482,5,11,0,0,479,481,5,1,0,0,480, - 479,1,0,0,0,481,484,1,0,0,0,482,480,1,0,0,0,482,483,1,0,0,0,483,79,1,0, - 0,0,484,482,1,0,0,0,485,486,3,82,41,0,486,81,1,0,0,0,487,489,5,1,0,0,488, - 487,1,0,0,0,489,492,1,0,0,0,490,488,1,0,0,0,490,491,1,0,0,0,491,493,1, - 0,0,0,492,490,1,0,0,0,493,497,5,12,0,0,494,496,5,1,0,0,495,494,1,0,0,0, - 496,499,1,0,0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,83,1,0,0,0,499,497, - 1,0,0,0,500,501,3,86,43,0,501,85,1,0,0,0,502,504,3,88,44,0,503,502,1,0, - 0,0,503,504,1,0,0,0,504,506,1,0,0,0,505,507,3,90,45,0,506,505,1,0,0,0, - 506,507,1,0,0,0,507,508,1,0,0,0,508,509,3,92,46,0,509,510,3,96,48,0,510, - 512,3,102,51,0,511,513,3,106,53,0,512,511,1,0,0,0,512,513,1,0,0,0,513, - 87,1,0,0,0,514,516,5,1,0,0,515,514,1,0,0,0,516,519,1,0,0,0,517,515,1,0, - 0,0,517,518,1,0,0,0,518,520,1,0,0,0,519,517,1,0,0,0,520,521,5,3,0,0,521, - 89,1,0,0,0,522,524,5,1,0,0,523,522,1,0,0,0,524,527,1,0,0,0,525,523,1,0, - 0,0,525,526,1,0,0,0,526,528,1,0,0,0,527,525,1,0,0,0,528,529,5,14,0,0,529, - 91,1,0,0,0,530,532,5,1,0,0,531,530,1,0,0,0,532,535,1,0,0,0,533,531,1,0, - 0,0,533,534,1,0,0,0,534,536,1,0,0,0,535,533,1,0,0,0,536,537,5,6,0,0,537, - 538,3,94,47,0,538,93,1,0,0,0,539,541,5,40,0,0,540,539,1,0,0,0,541,544, - 1,0,0,0,542,540,1,0,0,0,542,543,1,0,0,0,543,95,1,0,0,0,544,542,1,0,0,0, - 545,547,5,1,0,0,546,545,1,0,0,0,547,550,1,0,0,0,548,546,1,0,0,0,548,549, - 1,0,0,0,549,557,1,0,0,0,550,548,1,0,0,0,551,552,3,98,49,0,552,553,3,4, - 2,0,553,556,1,0,0,0,554,556,3,100,50,0,555,551,1,0,0,0,555,554,1,0,0,0, - 556,559,1,0,0,0,557,555,1,0,0,0,557,558,1,0,0,0,558,97,1,0,0,0,559,557, - 1,0,0,0,560,564,5,8,0,0,561,563,7,5,0,0,562,561,1,0,0,0,563,566,1,0,0, - 0,564,562,1,0,0,0,564,565,1,0,0,0,565,99,1,0,0,0,566,564,1,0,0,0,567,569, - 7,1,0,0,568,567,1,0,0,0,569,570,1,0,0,0,570,568,1,0,0,0,570,571,1,0,0, - 0,571,101,1,0,0,0,572,574,3,104,52,0,573,572,1,0,0,0,573,574,1,0,0,0,574, - 575,1,0,0,0,575,581,3,112,56,0,576,578,3,112,56,0,577,579,3,104,52,0,578, - 577,1,0,0,0,578,579,1,0,0,0,579,581,1,0,0,0,580,573,1,0,0,0,580,576,1, - 0,0,0,581,103,1,0,0,0,582,584,5,1,0,0,583,582,1,0,0,0,584,587,1,0,0,0, - 585,583,1,0,0,0,585,586,1,0,0,0,586,588,1,0,0,0,587,585,1,0,0,0,588,591, - 5,13,0,0,589,592,3,108,54,0,590,592,3,110,55,0,591,589,1,0,0,0,591,590, - 1,0,0,0,592,593,1,0,0,0,593,591,1,0,0,0,593,594,1,0,0,0,594,105,1,0,0, - 0,595,597,5,1,0,0,596,595,1,0,0,0,597,600,1,0,0,0,598,596,1,0,0,0,598, - 599,1,0,0,0,599,601,1,0,0,0,600,598,1,0,0,0,601,604,5,16,0,0,602,605,3, - 108,54,0,603,605,3,110,55,0,604,602,1,0,0,0,604,603,1,0,0,0,605,606,1, - 0,0,0,606,604,1,0,0,0,606,607,1,0,0,0,607,107,1,0,0,0,608,610,5,1,0,0, - 609,608,1,0,0,0,610,613,1,0,0,0,611,609,1,0,0,0,611,612,1,0,0,0,612,614, - 1,0,0,0,613,611,1,0,0,0,614,618,5,8,0,0,615,617,7,5,0,0,616,615,1,0,0, - 0,617,620,1,0,0,0,618,616,1,0,0,0,618,619,1,0,0,0,619,621,1,0,0,0,620, - 618,1,0,0,0,621,622,3,4,2,0,622,109,1,0,0,0,623,625,7,1,0,0,624,623,1, - 0,0,0,625,626,1,0,0,0,626,624,1,0,0,0,626,627,1,0,0,0,627,111,1,0,0,0, - 628,630,5,1,0,0,629,628,1,0,0,0,630,633,1,0,0,0,631,629,1,0,0,0,631,632, - 1,0,0,0,632,634,1,0,0,0,633,631,1,0,0,0,634,635,5,15,0,0,635,113,1,0,0, - 0,636,637,3,116,58,0,637,115,1,0,0,0,638,640,5,1,0,0,639,638,1,0,0,0,640, - 643,1,0,0,0,641,639,1,0,0,0,641,642,1,0,0,0,642,644,1,0,0,0,643,641,1, - 0,0,0,644,645,5,4,0,0,645,117,1,0,0,0,91,121,134,139,147,155,162,170,172, - 180,186,191,201,206,211,216,224,226,232,240,247,249,254,261,268,274,276, - 281,288,292,297,302,307,311,316,320,325,329,334,339,350,355,364,373,380, - 386,393,397,403,407,413,418,423,426,429,434,441,443,453,455,460,467,475, - 482,490,497,503,506,512,517,525,533,542,548,555,557,564,570,573,578,580, - 585,591,593,598,604,606,611,618,626,631,641 + 2,57,7,57,2,58,7,58,2,59,7,59,1,0,4,0,122,8,0,11,0,12,0,123,1,0,1,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,138,8,1,1,2,5,2,141,8,2,10,2, + 12,2,144,9,2,1,2,1,2,1,3,1,3,3,3,150,8,3,1,4,4,4,153,8,4,11,4,12,4,154, + 1,5,1,5,1,5,1,6,5,6,161,8,6,10,6,12,6,164,9,6,1,6,1,6,5,6,168,8,6,10,6, + 12,6,171,9,6,1,6,1,6,1,7,1,7,1,7,5,7,178,8,7,10,7,12,7,181,9,7,1,8,1,8, + 1,8,5,8,186,8,8,10,8,12,8,189,9,8,1,9,4,9,192,8,9,11,9,12,9,193,1,10,5, + 10,197,8,10,10,10,12,10,200,9,10,1,10,1,10,1,10,1,11,1,11,1,12,1,12,3, + 12,209,8,12,1,13,5,13,212,8,13,10,13,12,13,215,9,13,1,13,1,13,3,13,219, + 8,13,1,13,5,13,222,8,13,10,13,12,13,225,9,13,1,13,1,13,1,14,1,14,1,14, + 5,14,232,8,14,10,14,12,14,235,9,14,1,15,5,15,238,8,15,10,15,12,15,241, + 9,15,1,15,1,15,1,16,5,16,246,8,16,10,16,12,16,249,9,16,1,16,1,16,1,16, + 1,16,1,16,4,16,256,8,16,11,16,12,16,257,1,17,5,17,261,8,17,10,17,12,17, + 264,9,17,1,17,1,17,5,17,268,8,17,10,17,12,17,271,9,17,1,18,1,18,1,19,1, + 19,3,19,277,8,19,1,20,1,20,1,20,1,20,4,20,283,8,20,11,20,12,20,284,1,21, + 5,21,288,8,21,10,21,12,21,291,9,21,1,21,1,21,5,21,295,8,21,10,21,12,21, + 298,9,21,1,21,3,21,301,8,21,1,21,5,21,304,8,21,10,21,12,21,307,9,21,1, + 21,1,21,3,21,311,8,21,1,21,5,21,314,8,21,10,21,12,21,317,9,21,1,21,3,21, + 320,8,21,1,21,5,21,323,8,21,10,21,12,21,326,9,21,1,21,3,21,329,8,21,1, + 21,5,21,332,8,21,10,21,12,21,335,9,21,1,21,3,21,338,8,21,1,21,5,21,341, + 8,21,10,21,12,21,344,9,21,1,21,1,21,3,21,348,8,21,1,21,1,21,1,22,1,22, + 1,23,1,23,1,24,1,24,1,25,3,25,359,8,25,1,25,5,25,362,8,25,10,25,12,25, + 365,9,25,1,25,1,25,1,26,1,26,5,26,371,8,26,10,26,12,26,374,9,26,1,26,1, + 26,1,27,1,27,5,27,380,8,27,10,27,12,27,383,9,27,1,27,1,27,5,27,387,8,27, + 10,27,12,27,390,9,27,1,27,5,27,393,8,27,10,27,12,27,396,9,27,1,28,1,28, + 5,28,400,8,28,10,28,12,28,403,9,28,1,28,3,28,406,8,28,1,29,1,29,5,29,410, + 8,29,10,29,12,29,413,9,29,1,29,3,29,416,8,29,1,30,1,30,1,31,1,31,3,31, + 422,8,31,1,32,5,32,425,8,32,10,32,12,32,428,9,32,1,32,1,32,3,32,432,8, + 32,1,32,3,32,435,8,32,1,32,3,32,438,8,32,1,33,4,33,441,8,33,11,33,12,33, + 442,1,34,1,34,1,34,1,34,1,34,4,34,450,8,34,11,34,12,34,451,1,35,1,35,1, + 36,1,36,1,37,1,37,1,37,1,37,4,37,462,8,37,11,37,12,37,463,1,38,5,38,467, + 8,38,10,38,12,38,470,9,38,1,38,1,38,5,38,474,8,38,10,38,12,38,477,9,38, + 1,39,1,39,1,40,5,40,482,8,40,10,40,12,40,485,9,40,1,40,1,40,5,40,489,8, + 40,10,40,12,40,492,9,40,1,41,1,41,1,42,5,42,497,8,42,10,42,12,42,500,9, + 42,1,42,1,42,5,42,504,8,42,10,42,12,42,507,9,42,1,43,1,43,1,44,3,44,512, + 8,44,1,44,3,44,515,8,44,1,44,1,44,1,44,1,44,3,44,521,8,44,1,45,5,45,524, + 8,45,10,45,12,45,527,9,45,1,45,1,45,1,46,5,46,532,8,46,10,46,12,46,535, + 9,46,1,46,1,46,1,47,5,47,540,8,47,10,47,12,47,543,9,47,1,47,1,47,1,47, + 1,48,5,48,549,8,48,10,48,12,48,552,9,48,1,49,5,49,555,8,49,10,49,12,49, + 558,9,49,1,49,1,49,1,49,1,49,5,49,564,8,49,10,49,12,49,567,9,49,1,50,1, + 50,5,50,571,8,50,10,50,12,50,574,9,50,1,51,4,51,577,8,51,11,51,12,51,578, + 1,52,3,52,582,8,52,1,52,1,52,1,52,3,52,587,8,52,3,52,589,8,52,1,53,5,53, + 592,8,53,10,53,12,53,595,9,53,1,53,1,53,1,53,4,53,600,8,53,11,53,12,53, + 601,1,54,5,54,605,8,54,10,54,12,54,608,9,54,1,54,1,54,1,54,4,54,613,8, + 54,11,54,12,54,614,1,55,5,55,618,8,55,10,55,12,55,621,9,55,1,55,1,55,5, + 55,625,8,55,10,55,12,55,628,9,55,1,55,1,55,1,56,4,56,633,8,56,11,56,12, + 56,634,1,57,5,57,638,8,57,10,57,12,57,641,9,57,1,57,1,57,1,58,1,58,1,59, + 5,59,648,8,59,10,59,12,59,651,9,59,1,59,1,59,1,59,1,123,0,60,0,2,4,6,8, + 10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56, + 58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102, + 104,106,108,110,112,114,116,118,0,6,1,1,2,2,2,0,1,1,17,17,2,0,1,1,31,33, + 1,0,26,27,2,0,1,1,37,37,2,0,1,1,33,33,700,0,121,1,0,0,0,2,137,1,0,0,0, + 4,142,1,0,0,0,6,147,1,0,0,0,8,152,1,0,0,0,10,156,1,0,0,0,12,162,1,0,0, + 0,14,174,1,0,0,0,16,182,1,0,0,0,18,191,1,0,0,0,20,198,1,0,0,0,22,204,1, + 0,0,0,24,206,1,0,0,0,26,213,1,0,0,0,28,228,1,0,0,0,30,239,1,0,0,0,32,247, + 1,0,0,0,34,262,1,0,0,0,36,272,1,0,0,0,38,274,1,0,0,0,40,282,1,0,0,0,42, + 289,1,0,0,0,44,351,1,0,0,0,46,353,1,0,0,0,48,355,1,0,0,0,50,358,1,0,0, + 0,52,368,1,0,0,0,54,377,1,0,0,0,56,397,1,0,0,0,58,407,1,0,0,0,60,417,1, + 0,0,0,62,419,1,0,0,0,64,426,1,0,0,0,66,440,1,0,0,0,68,449,1,0,0,0,70,453, + 1,0,0,0,72,455,1,0,0,0,74,461,1,0,0,0,76,468,1,0,0,0,78,478,1,0,0,0,80, + 483,1,0,0,0,82,493,1,0,0,0,84,498,1,0,0,0,86,508,1,0,0,0,88,511,1,0,0, + 0,90,525,1,0,0,0,92,533,1,0,0,0,94,541,1,0,0,0,96,550,1,0,0,0,98,556,1, + 0,0,0,100,568,1,0,0,0,102,576,1,0,0,0,104,588,1,0,0,0,106,593,1,0,0,0, + 108,606,1,0,0,0,110,619,1,0,0,0,112,632,1,0,0,0,114,639,1,0,0,0,116,644, + 1,0,0,0,118,649,1,0,0,0,120,122,3,2,1,0,121,120,1,0,0,0,122,123,1,0,0, + 0,123,124,1,0,0,0,123,121,1,0,0,0,124,125,1,0,0,0,125,126,5,0,0,1,126, + 1,1,0,0,0,127,138,5,2,0,0,128,138,3,10,5,0,129,138,3,22,11,0,130,138,3, + 60,30,0,131,138,3,36,18,0,132,138,3,78,39,0,133,138,3,82,41,0,134,138, + 3,86,43,0,135,138,3,116,58,0,136,138,3,6,3,0,137,127,1,0,0,0,137,128,1, + 0,0,0,137,129,1,0,0,0,137,130,1,0,0,0,137,131,1,0,0,0,137,132,1,0,0,0, + 137,133,1,0,0,0,137,134,1,0,0,0,137,135,1,0,0,0,137,136,1,0,0,0,138,3, + 1,0,0,0,139,141,5,1,0,0,140,139,1,0,0,0,141,144,1,0,0,0,142,140,1,0,0, + 0,142,143,1,0,0,0,143,145,1,0,0,0,144,142,1,0,0,0,145,146,7,0,0,0,146, + 5,1,0,0,0,147,149,5,5,0,0,148,150,5,2,0,0,149,148,1,0,0,0,149,150,1,0, + 0,0,150,7,1,0,0,0,151,153,7,1,0,0,152,151,1,0,0,0,153,154,1,0,0,0,154, + 152,1,0,0,0,154,155,1,0,0,0,155,9,1,0,0,0,156,157,3,12,6,0,157,158,3,18, + 9,0,158,11,1,0,0,0,159,161,5,1,0,0,160,159,1,0,0,0,161,164,1,0,0,0,162, + 160,1,0,0,0,162,163,1,0,0,0,163,165,1,0,0,0,164,162,1,0,0,0,165,169,5, + 7,0,0,166,168,5,1,0,0,167,166,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0, + 169,170,1,0,0,0,170,172,1,0,0,0,171,169,1,0,0,0,172,173,3,14,7,0,173,13, + 1,0,0,0,174,179,3,16,8,0,175,178,5,1,0,0,176,178,3,16,8,0,177,175,1,0, + 0,0,177,176,1,0,0,0,178,181,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180, + 15,1,0,0,0,181,179,1,0,0,0,182,187,5,29,0,0,183,184,5,30,0,0,184,186,5, + 29,0,0,185,183,1,0,0,0,186,189,1,0,0,0,187,185,1,0,0,0,187,188,1,0,0,0, + 188,17,1,0,0,0,189,187,1,0,0,0,190,192,3,20,10,0,191,190,1,0,0,0,192,193, + 1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194,19,1,0,0,0,195,197,5,1,0,0, + 196,195,1,0,0,0,197,200,1,0,0,0,198,196,1,0,0,0,198,199,1,0,0,0,199,201, + 1,0,0,0,200,198,1,0,0,0,201,202,5,7,0,0,202,203,3,22,11,0,203,21,1,0,0, + 0,204,205,3,24,12,0,205,23,1,0,0,0,206,208,3,26,13,0,207,209,3,30,15,0, + 208,207,1,0,0,0,208,209,1,0,0,0,209,25,1,0,0,0,210,212,5,1,0,0,211,210, + 1,0,0,0,212,215,1,0,0,0,213,211,1,0,0,0,213,214,1,0,0,0,214,216,1,0,0, + 0,215,213,1,0,0,0,216,218,5,7,0,0,217,219,5,7,0,0,218,217,1,0,0,0,218, + 219,1,0,0,0,219,223,1,0,0,0,220,222,5,1,0,0,221,220,1,0,0,0,222,225,1, + 0,0,0,223,221,1,0,0,0,223,224,1,0,0,0,224,226,1,0,0,0,225,223,1,0,0,0, + 226,227,3,28,14,0,227,27,1,0,0,0,228,233,3,16,8,0,229,232,5,1,0,0,230, + 232,3,16,8,0,231,229,1,0,0,0,231,230,1,0,0,0,232,235,1,0,0,0,233,231,1, + 0,0,0,233,234,1,0,0,0,234,29,1,0,0,0,235,233,1,0,0,0,236,238,5,1,0,0,237, + 236,1,0,0,0,238,241,1,0,0,0,239,237,1,0,0,0,239,240,1,0,0,0,240,242,1, + 0,0,0,241,239,1,0,0,0,242,243,3,32,16,0,243,31,1,0,0,0,244,246,5,1,0,0, + 245,244,1,0,0,0,246,249,1,0,0,0,247,245,1,0,0,0,247,248,1,0,0,0,248,255, + 1,0,0,0,249,247,1,0,0,0,250,251,3,34,17,0,251,252,3,4,2,0,252,256,1,0, + 0,0,253,256,3,8,4,0,254,256,3,6,3,0,255,250,1,0,0,0,255,253,1,0,0,0,255, + 254,1,0,0,0,256,257,1,0,0,0,257,255,1,0,0,0,257,258,1,0,0,0,258,33,1,0, + 0,0,259,261,5,1,0,0,260,259,1,0,0,0,261,264,1,0,0,0,262,260,1,0,0,0,262, + 263,1,0,0,0,263,265,1,0,0,0,264,262,1,0,0,0,265,269,5,8,0,0,266,268,7, + 2,0,0,267,266,1,0,0,0,268,271,1,0,0,0,269,267,1,0,0,0,269,270,1,0,0,0, + 270,35,1,0,0,0,271,269,1,0,0,0,272,273,3,38,19,0,273,37,1,0,0,0,274,276, + 3,42,21,0,275,277,3,40,20,0,276,275,1,0,0,0,276,277,1,0,0,0,277,39,1,0, + 0,0,278,279,3,76,38,0,279,280,3,4,2,0,280,283,1,0,0,0,281,283,3,8,4,0, + 282,278,1,0,0,0,282,281,1,0,0,0,283,284,1,0,0,0,284,282,1,0,0,0,284,285, + 1,0,0,0,285,41,1,0,0,0,286,288,5,1,0,0,287,286,1,0,0,0,288,291,1,0,0,0, + 289,287,1,0,0,0,289,290,1,0,0,0,290,292,1,0,0,0,291,289,1,0,0,0,292,296, + 5,10,0,0,293,295,5,1,0,0,294,293,1,0,0,0,295,298,1,0,0,0,296,294,1,0,0, + 0,296,297,1,0,0,0,297,300,1,0,0,0,298,296,1,0,0,0,299,301,3,48,24,0,300, + 299,1,0,0,0,300,301,1,0,0,0,301,305,1,0,0,0,302,304,5,1,0,0,303,302,1, + 0,0,0,304,307,1,0,0,0,305,303,1,0,0,0,305,306,1,0,0,0,306,310,1,0,0,0, + 307,305,1,0,0,0,308,311,3,56,28,0,309,311,3,58,29,0,310,308,1,0,0,0,310, + 309,1,0,0,0,310,311,1,0,0,0,311,315,1,0,0,0,312,314,5,1,0,0,313,312,1, + 0,0,0,314,317,1,0,0,0,315,313,1,0,0,0,315,316,1,0,0,0,316,319,1,0,0,0, + 317,315,1,0,0,0,318,320,3,50,25,0,319,318,1,0,0,0,319,320,1,0,0,0,320, + 324,1,0,0,0,321,323,5,1,0,0,322,321,1,0,0,0,323,326,1,0,0,0,324,322,1, + 0,0,0,324,325,1,0,0,0,325,328,1,0,0,0,326,324,1,0,0,0,327,329,3,52,26, + 0,328,327,1,0,0,0,328,329,1,0,0,0,329,333,1,0,0,0,330,332,5,1,0,0,331, + 330,1,0,0,0,332,335,1,0,0,0,333,331,1,0,0,0,333,334,1,0,0,0,334,337,1, + 0,0,0,335,333,1,0,0,0,336,338,5,18,0,0,337,336,1,0,0,0,337,338,1,0,0,0, + 338,342,1,0,0,0,339,341,5,1,0,0,340,339,1,0,0,0,341,344,1,0,0,0,342,340, + 1,0,0,0,342,343,1,0,0,0,343,347,1,0,0,0,344,342,1,0,0,0,345,348,3,44,22, + 0,346,348,3,46,23,0,347,345,1,0,0,0,347,346,1,0,0,0,347,348,1,0,0,0,348, + 349,1,0,0,0,349,350,3,4,2,0,350,43,1,0,0,0,351,352,5,24,0,0,352,45,1,0, + 0,0,353,354,5,25,0,0,354,47,1,0,0,0,355,356,5,22,0,0,356,49,1,0,0,0,357, + 359,5,20,0,0,358,357,1,0,0,0,358,359,1,0,0,0,359,363,1,0,0,0,360,362,5, + 1,0,0,361,360,1,0,0,0,362,365,1,0,0,0,363,361,1,0,0,0,363,364,1,0,0,0, + 364,366,1,0,0,0,365,363,1,0,0,0,366,367,3,54,27,0,367,51,1,0,0,0,368,372, + 5,21,0,0,369,371,5,1,0,0,370,369,1,0,0,0,371,374,1,0,0,0,372,370,1,0,0, + 0,372,373,1,0,0,0,373,375,1,0,0,0,374,372,1,0,0,0,375,376,3,54,27,0,376, + 53,1,0,0,0,377,394,7,3,0,0,378,380,5,1,0,0,379,378,1,0,0,0,380,383,1,0, + 0,0,381,379,1,0,0,0,381,382,1,0,0,0,382,384,1,0,0,0,383,381,1,0,0,0,384, + 388,5,19,0,0,385,387,5,1,0,0,386,385,1,0,0,0,387,390,1,0,0,0,388,386,1, + 0,0,0,388,389,1,0,0,0,389,391,1,0,0,0,390,388,1,0,0,0,391,393,7,3,0,0, + 392,381,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,55, + 1,0,0,0,396,394,1,0,0,0,397,405,5,26,0,0,398,400,5,1,0,0,399,398,1,0,0, + 0,400,403,1,0,0,0,401,399,1,0,0,0,401,402,1,0,0,0,402,404,1,0,0,0,403, + 401,1,0,0,0,404,406,5,23,0,0,405,401,1,0,0,0,405,406,1,0,0,0,406,57,1, + 0,0,0,407,415,5,27,0,0,408,410,5,1,0,0,409,408,1,0,0,0,410,413,1,0,0,0, + 411,409,1,0,0,0,411,412,1,0,0,0,412,414,1,0,0,0,413,411,1,0,0,0,414,416, + 5,23,0,0,415,411,1,0,0,0,415,416,1,0,0,0,416,59,1,0,0,0,417,418,3,62,31, + 0,418,61,1,0,0,0,419,421,3,64,32,0,420,422,3,74,37,0,421,420,1,0,0,0,421, + 422,1,0,0,0,422,63,1,0,0,0,423,425,5,1,0,0,424,423,1,0,0,0,425,428,1,0, + 0,0,426,424,1,0,0,0,426,427,1,0,0,0,427,429,1,0,0,0,428,426,1,0,0,0,429, + 431,5,9,0,0,430,432,3,66,33,0,431,430,1,0,0,0,431,432,1,0,0,0,432,434, + 1,0,0,0,433,435,5,38,0,0,434,433,1,0,0,0,434,435,1,0,0,0,435,437,1,0,0, + 0,436,438,3,68,34,0,437,436,1,0,0,0,437,438,1,0,0,0,438,65,1,0,0,0,439, + 441,7,4,0,0,440,439,1,0,0,0,441,442,1,0,0,0,442,440,1,0,0,0,442,443,1, + 0,0,0,443,67,1,0,0,0,444,450,3,70,35,0,445,450,3,72,36,0,446,450,5,37, + 0,0,447,450,5,38,0,0,448,450,5,1,0,0,449,444,1,0,0,0,449,445,1,0,0,0,449, + 446,1,0,0,0,449,447,1,0,0,0,449,448,1,0,0,0,450,451,1,0,0,0,451,449,1, + 0,0,0,451,452,1,0,0,0,452,69,1,0,0,0,453,454,5,35,0,0,454,71,1,0,0,0,455, + 456,5,36,0,0,456,73,1,0,0,0,457,458,3,76,38,0,458,459,3,4,2,0,459,462, + 1,0,0,0,460,462,3,8,4,0,461,457,1,0,0,0,461,460,1,0,0,0,462,463,1,0,0, + 0,463,461,1,0,0,0,463,464,1,0,0,0,464,75,1,0,0,0,465,467,5,1,0,0,466,465, + 1,0,0,0,467,470,1,0,0,0,468,466,1,0,0,0,468,469,1,0,0,0,469,471,1,0,0, + 0,470,468,1,0,0,0,471,475,5,8,0,0,472,474,7,2,0,0,473,472,1,0,0,0,474, + 477,1,0,0,0,475,473,1,0,0,0,475,476,1,0,0,0,476,77,1,0,0,0,477,475,1,0, + 0,0,478,479,3,80,40,0,479,79,1,0,0,0,480,482,5,1,0,0,481,480,1,0,0,0,482, + 485,1,0,0,0,483,481,1,0,0,0,483,484,1,0,0,0,484,486,1,0,0,0,485,483,1, + 0,0,0,486,490,5,11,0,0,487,489,5,1,0,0,488,487,1,0,0,0,489,492,1,0,0,0, + 490,488,1,0,0,0,490,491,1,0,0,0,491,81,1,0,0,0,492,490,1,0,0,0,493,494, + 3,84,42,0,494,83,1,0,0,0,495,497,5,1,0,0,496,495,1,0,0,0,497,500,1,0,0, + 0,498,496,1,0,0,0,498,499,1,0,0,0,499,501,1,0,0,0,500,498,1,0,0,0,501, + 505,5,12,0,0,502,504,5,1,0,0,503,502,1,0,0,0,504,507,1,0,0,0,505,503,1, + 0,0,0,505,506,1,0,0,0,506,85,1,0,0,0,507,505,1,0,0,0,508,509,3,88,44,0, + 509,87,1,0,0,0,510,512,3,90,45,0,511,510,1,0,0,0,511,512,1,0,0,0,512,514, + 1,0,0,0,513,515,3,92,46,0,514,513,1,0,0,0,514,515,1,0,0,0,515,516,1,0, + 0,0,516,517,3,94,47,0,517,518,3,98,49,0,518,520,3,104,52,0,519,521,3,108, + 54,0,520,519,1,0,0,0,520,521,1,0,0,0,521,89,1,0,0,0,522,524,5,1,0,0,523, + 522,1,0,0,0,524,527,1,0,0,0,525,523,1,0,0,0,525,526,1,0,0,0,526,528,1, + 0,0,0,527,525,1,0,0,0,528,529,5,3,0,0,529,91,1,0,0,0,530,532,5,1,0,0,531, + 530,1,0,0,0,532,535,1,0,0,0,533,531,1,0,0,0,533,534,1,0,0,0,534,536,1, + 0,0,0,535,533,1,0,0,0,536,537,5,14,0,0,537,93,1,0,0,0,538,540,5,1,0,0, + 539,538,1,0,0,0,540,543,1,0,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,544, + 1,0,0,0,543,541,1,0,0,0,544,545,5,6,0,0,545,546,3,96,48,0,546,95,1,0,0, + 0,547,549,5,40,0,0,548,547,1,0,0,0,549,552,1,0,0,0,550,548,1,0,0,0,550, + 551,1,0,0,0,551,97,1,0,0,0,552,550,1,0,0,0,553,555,5,1,0,0,554,553,1,0, + 0,0,555,558,1,0,0,0,556,554,1,0,0,0,556,557,1,0,0,0,557,565,1,0,0,0,558, + 556,1,0,0,0,559,560,3,100,50,0,560,561,3,4,2,0,561,564,1,0,0,0,562,564, + 3,102,51,0,563,559,1,0,0,0,563,562,1,0,0,0,564,567,1,0,0,0,565,563,1,0, + 0,0,565,566,1,0,0,0,566,99,1,0,0,0,567,565,1,0,0,0,568,572,5,8,0,0,569, + 571,7,5,0,0,570,569,1,0,0,0,571,574,1,0,0,0,572,570,1,0,0,0,572,573,1, + 0,0,0,573,101,1,0,0,0,574,572,1,0,0,0,575,577,7,1,0,0,576,575,1,0,0,0, + 577,578,1,0,0,0,578,576,1,0,0,0,578,579,1,0,0,0,579,103,1,0,0,0,580,582, + 3,106,53,0,581,580,1,0,0,0,581,582,1,0,0,0,582,583,1,0,0,0,583,589,3,114, + 57,0,584,586,3,114,57,0,585,587,3,106,53,0,586,585,1,0,0,0,586,587,1,0, + 0,0,587,589,1,0,0,0,588,581,1,0,0,0,588,584,1,0,0,0,589,105,1,0,0,0,590, + 592,5,1,0,0,591,590,1,0,0,0,592,595,1,0,0,0,593,591,1,0,0,0,593,594,1, + 0,0,0,594,596,1,0,0,0,595,593,1,0,0,0,596,599,5,13,0,0,597,600,3,110,55, + 0,598,600,3,112,56,0,599,597,1,0,0,0,599,598,1,0,0,0,600,601,1,0,0,0,601, + 599,1,0,0,0,601,602,1,0,0,0,602,107,1,0,0,0,603,605,5,1,0,0,604,603,1, + 0,0,0,605,608,1,0,0,0,606,604,1,0,0,0,606,607,1,0,0,0,607,609,1,0,0,0, + 608,606,1,0,0,0,609,612,5,16,0,0,610,613,3,110,55,0,611,613,3,112,56,0, + 612,610,1,0,0,0,612,611,1,0,0,0,613,614,1,0,0,0,614,612,1,0,0,0,614,615, + 1,0,0,0,615,109,1,0,0,0,616,618,5,1,0,0,617,616,1,0,0,0,618,621,1,0,0, + 0,619,617,1,0,0,0,619,620,1,0,0,0,620,622,1,0,0,0,621,619,1,0,0,0,622, + 626,5,8,0,0,623,625,7,5,0,0,624,623,1,0,0,0,625,628,1,0,0,0,626,624,1, + 0,0,0,626,627,1,0,0,0,627,629,1,0,0,0,628,626,1,0,0,0,629,630,3,4,2,0, + 630,111,1,0,0,0,631,633,7,1,0,0,632,631,1,0,0,0,633,634,1,0,0,0,634,632, + 1,0,0,0,634,635,1,0,0,0,635,113,1,0,0,0,636,638,5,1,0,0,637,636,1,0,0, + 0,638,641,1,0,0,0,639,637,1,0,0,0,639,640,1,0,0,0,640,642,1,0,0,0,641, + 639,1,0,0,0,642,643,5,15,0,0,643,115,1,0,0,0,644,645,3,118,59,0,645,117, + 1,0,0,0,646,648,5,1,0,0,647,646,1,0,0,0,648,651,1,0,0,0,649,647,1,0,0, + 0,649,650,1,0,0,0,650,652,1,0,0,0,651,649,1,0,0,0,652,653,5,4,0,0,653, + 119,1,0,0,0,92,123,137,142,149,154,162,169,177,179,187,193,198,208,213, + 218,223,231,233,239,247,255,257,262,269,276,282,284,289,296,300,305,310, + 315,319,324,328,333,337,342,347,358,363,372,381,388,394,401,405,411,415, + 421,426,431,434,437,442,449,451,461,463,468,475,483,490,498,505,511,514, + 520,525,533,541,550,556,563,565,572,578,581,586,588,593,599,601,606,612, + 614,619,626,634,639,649 }; public static readonly ATN _ATN = diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp index 639b9a581a..3458f71511 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp @@ -88,6 +88,7 @@ rule names: file paragraph newline +commentDefinition errorString nestedIntentSection nestedIntentNameLine @@ -147,4 +148,4 @@ modelInfoDefinition atn: -[4, 1, 40, 647, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 1, 0, 4, 0, 120, 8, 0, 11, 0, 12, 0, 121, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 135, 8, 1, 1, 2, 5, 2, 138, 8, 2, 10, 2, 12, 2, 141, 9, 2, 1, 2, 1, 2, 1, 3, 4, 3, 146, 8, 3, 11, 3, 12, 3, 147, 1, 4, 1, 4, 1, 4, 1, 5, 5, 5, 154, 8, 5, 10, 5, 12, 5, 157, 9, 5, 1, 5, 1, 5, 5, 5, 161, 8, 5, 10, 5, 12, 5, 164, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 5, 6, 171, 8, 6, 10, 6, 12, 6, 174, 9, 6, 1, 7, 1, 7, 1, 7, 5, 7, 179, 8, 7, 10, 7, 12, 7, 182, 9, 7, 1, 8, 4, 8, 185, 8, 8, 11, 8, 12, 8, 186, 1, 9, 5, 9, 190, 8, 9, 10, 9, 12, 9, 193, 9, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 202, 8, 11, 1, 12, 5, 12, 205, 8, 12, 10, 12, 12, 12, 208, 9, 12, 1, 12, 1, 12, 3, 12, 212, 8, 12, 1, 12, 5, 12, 215, 8, 12, 10, 12, 12, 12, 218, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, 225, 8, 13, 10, 13, 12, 13, 228, 9, 13, 1, 14, 5, 14, 231, 8, 14, 10, 14, 12, 14, 234, 9, 14, 1, 14, 1, 14, 1, 15, 5, 15, 239, 8, 15, 10, 15, 12, 15, 242, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 4, 15, 248, 8, 15, 11, 15, 12, 15, 249, 1, 16, 5, 16, 253, 8, 16, 10, 16, 12, 16, 256, 9, 16, 1, 16, 1, 16, 5, 16, 260, 8, 16, 10, 16, 12, 16, 263, 9, 16, 1, 17, 1, 17, 1, 18, 1, 18, 3, 18, 269, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 4, 19, 275, 8, 19, 11, 19, 12, 19, 276, 1, 20, 5, 20, 280, 8, 20, 10, 20, 12, 20, 283, 9, 20, 1, 20, 1, 20, 5, 20, 287, 8, 20, 10, 20, 12, 20, 290, 9, 20, 1, 20, 3, 20, 293, 8, 20, 1, 20, 5, 20, 296, 8, 20, 10, 20, 12, 20, 299, 9, 20, 1, 20, 1, 20, 3, 20, 303, 8, 20, 1, 20, 5, 20, 306, 8, 20, 10, 20, 12, 20, 309, 9, 20, 1, 20, 3, 20, 312, 8, 20, 1, 20, 5, 20, 315, 8, 20, 10, 20, 12, 20, 318, 9, 20, 1, 20, 3, 20, 321, 8, 20, 1, 20, 5, 20, 324, 8, 20, 10, 20, 12, 20, 327, 9, 20, 1, 20, 3, 20, 330, 8, 20, 1, 20, 5, 20, 333, 8, 20, 10, 20, 12, 20, 336, 9, 20, 1, 20, 1, 20, 3, 20, 340, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 3, 24, 351, 8, 24, 1, 24, 5, 24, 354, 8, 24, 10, 24, 12, 24, 357, 9, 24, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 363, 8, 25, 10, 25, 12, 25, 366, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 5, 26, 372, 8, 26, 10, 26, 12, 26, 375, 9, 26, 1, 26, 1, 26, 5, 26, 379, 8, 26, 10, 26, 12, 26, 382, 9, 26, 1, 26, 5, 26, 385, 8, 26, 10, 26, 12, 26, 388, 9, 26, 1, 27, 1, 27, 5, 27, 392, 8, 27, 10, 27, 12, 27, 395, 9, 27, 1, 27, 3, 27, 398, 8, 27, 1, 28, 1, 28, 5, 28, 402, 8, 28, 10, 28, 12, 28, 405, 9, 28, 1, 28, 3, 28, 408, 8, 28, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 414, 8, 30, 1, 31, 5, 31, 417, 8, 31, 10, 31, 12, 31, 420, 9, 31, 1, 31, 1, 31, 3, 31, 424, 8, 31, 1, 31, 3, 31, 427, 8, 31, 1, 31, 3, 31, 430, 8, 31, 1, 32, 4, 32, 433, 8, 32, 11, 32, 12, 32, 434, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 442, 8, 33, 11, 33, 12, 33, 443, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 4, 36, 454, 8, 36, 11, 36, 12, 36, 455, 1, 37, 5, 37, 459, 8, 37, 10, 37, 12, 37, 462, 9, 37, 1, 37, 1, 37, 5, 37, 466, 8, 37, 10, 37, 12, 37, 469, 9, 37, 1, 38, 1, 38, 1, 39, 5, 39, 474, 8, 39, 10, 39, 12, 39, 477, 9, 39, 1, 39, 1, 39, 5, 39, 481, 8, 39, 10, 39, 12, 39, 484, 9, 39, 1, 40, 1, 40, 1, 41, 5, 41, 489, 8, 41, 10, 41, 12, 41, 492, 9, 41, 1, 41, 1, 41, 5, 41, 496, 8, 41, 10, 41, 12, 41, 499, 9, 41, 1, 42, 1, 42, 1, 43, 3, 43, 504, 8, 43, 1, 43, 3, 43, 507, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 513, 8, 43, 1, 44, 5, 44, 516, 8, 44, 10, 44, 12, 44, 519, 9, 44, 1, 44, 1, 44, 1, 45, 5, 45, 524, 8, 45, 10, 45, 12, 45, 527, 9, 45, 1, 45, 1, 45, 1, 46, 5, 46, 532, 8, 46, 10, 46, 12, 46, 535, 9, 46, 1, 46, 1, 46, 1, 46, 1, 47, 5, 47, 541, 8, 47, 10, 47, 12, 47, 544, 9, 47, 1, 48, 5, 48, 547, 8, 48, 10, 48, 12, 48, 550, 9, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 556, 8, 48, 10, 48, 12, 48, 559, 9, 48, 1, 49, 1, 49, 5, 49, 563, 8, 49, 10, 49, 12, 49, 566, 9, 49, 1, 50, 4, 50, 569, 8, 50, 11, 50, 12, 50, 570, 1, 51, 3, 51, 574, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 579, 8, 51, 3, 51, 581, 8, 51, 1, 52, 5, 52, 584, 8, 52, 10, 52, 12, 52, 587, 9, 52, 1, 52, 1, 52, 1, 52, 4, 52, 592, 8, 52, 11, 52, 12, 52, 593, 1, 53, 5, 53, 597, 8, 53, 10, 53, 12, 53, 600, 9, 53, 1, 53, 1, 53, 1, 53, 4, 53, 605, 8, 53, 11, 53, 12, 53, 606, 1, 54, 5, 54, 610, 8, 54, 10, 54, 12, 54, 613, 9, 54, 1, 54, 1, 54, 5, 54, 617, 8, 54, 10, 54, 12, 54, 620, 9, 54, 1, 54, 1, 54, 1, 55, 4, 55, 625, 8, 55, 11, 55, 12, 55, 626, 1, 56, 5, 56, 630, 8, 56, 10, 56, 12, 56, 633, 9, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 5, 58, 640, 8, 58, 10, 58, 12, 58, 643, 9, 58, 1, 58, 1, 58, 1, 58, 1, 121, 0, 59, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 0, 6, 1, 1, 2, 2, 2, 0, 1, 1, 17, 17, 2, 0, 1, 1, 31, 33, 1, 0, 26, 27, 2, 0, 1, 1, 37, 37, 2, 0, 1, 1, 33, 33, 690, 0, 119, 1, 0, 0, 0, 2, 134, 1, 0, 0, 0, 4, 139, 1, 0, 0, 0, 6, 145, 1, 0, 0, 0, 8, 149, 1, 0, 0, 0, 10, 155, 1, 0, 0, 0, 12, 167, 1, 0, 0, 0, 14, 175, 1, 0, 0, 0, 16, 184, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 197, 1, 0, 0, 0, 22, 199, 1, 0, 0, 0, 24, 206, 1, 0, 0, 0, 26, 221, 1, 0, 0, 0, 28, 232, 1, 0, 0, 0, 30, 240, 1, 0, 0, 0, 32, 254, 1, 0, 0, 0, 34, 264, 1, 0, 0, 0, 36, 266, 1, 0, 0, 0, 38, 274, 1, 0, 0, 0, 40, 281, 1, 0, 0, 0, 42, 343, 1, 0, 0, 0, 44, 345, 1, 0, 0, 0, 46, 347, 1, 0, 0, 0, 48, 350, 1, 0, 0, 0, 50, 360, 1, 0, 0, 0, 52, 369, 1, 0, 0, 0, 54, 389, 1, 0, 0, 0, 56, 399, 1, 0, 0, 0, 58, 409, 1, 0, 0, 0, 60, 411, 1, 0, 0, 0, 62, 418, 1, 0, 0, 0, 64, 432, 1, 0, 0, 0, 66, 441, 1, 0, 0, 0, 68, 445, 1, 0, 0, 0, 70, 447, 1, 0, 0, 0, 72, 453, 1, 0, 0, 0, 74, 460, 1, 0, 0, 0, 76, 470, 1, 0, 0, 0, 78, 475, 1, 0, 0, 0, 80, 485, 1, 0, 0, 0, 82, 490, 1, 0, 0, 0, 84, 500, 1, 0, 0, 0, 86, 503, 1, 0, 0, 0, 88, 517, 1, 0, 0, 0, 90, 525, 1, 0, 0, 0, 92, 533, 1, 0, 0, 0, 94, 542, 1, 0, 0, 0, 96, 548, 1, 0, 0, 0, 98, 560, 1, 0, 0, 0, 100, 568, 1, 0, 0, 0, 102, 580, 1, 0, 0, 0, 104, 585, 1, 0, 0, 0, 106, 598, 1, 0, 0, 0, 108, 611, 1, 0, 0, 0, 110, 624, 1, 0, 0, 0, 112, 631, 1, 0, 0, 0, 114, 636, 1, 0, 0, 0, 116, 641, 1, 0, 0, 0, 118, 120, 3, 2, 1, 0, 119, 118, 1, 0, 0, 0, 120, 121, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 124, 5, 0, 0, 1, 124, 1, 1, 0, 0, 0, 125, 135, 5, 2, 0, 0, 126, 135, 3, 8, 4, 0, 127, 135, 3, 20, 10, 0, 128, 135, 3, 58, 29, 0, 129, 135, 3, 34, 17, 0, 130, 135, 3, 76, 38, 0, 131, 135, 3, 80, 40, 0, 132, 135, 3, 84, 42, 0, 133, 135, 3, 114, 57, 0, 134, 125, 1, 0, 0, 0, 134, 126, 1, 0, 0, 0, 134, 127, 1, 0, 0, 0, 134, 128, 1, 0, 0, 0, 134, 129, 1, 0, 0, 0, 134, 130, 1, 0, 0, 0, 134, 131, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 134, 133, 1, 0, 0, 0, 135, 3, 1, 0, 0, 0, 136, 138, 5, 1, 0, 0, 137, 136, 1, 0, 0, 0, 138, 141, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 142, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 142, 143, 7, 0, 0, 0, 143, 5, 1, 0, 0, 0, 144, 146, 7, 1, 0, 0, 145, 144, 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 147, 148, 1, 0, 0, 0, 148, 7, 1, 0, 0, 0, 149, 150, 3, 10, 5, 0, 150, 151, 3, 16, 8, 0, 151, 9, 1, 0, 0, 0, 152, 154, 5, 1, 0, 0, 153, 152, 1, 0, 0, 0, 154, 157, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 158, 162, 5, 7, 0, 0, 159, 161, 5, 1, 0, 0, 160, 159, 1, 0, 0, 0, 161, 164, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 165, 166, 3, 12, 6, 0, 166, 11, 1, 0, 0, 0, 167, 172, 3, 14, 7, 0, 168, 171, 5, 1, 0, 0, 169, 171, 3, 14, 7, 0, 170, 168, 1, 0, 0, 0, 170, 169, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 13, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 180, 5, 29, 0, 0, 176, 177, 5, 30, 0, 0, 177, 179, 5, 29, 0, 0, 178, 176, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 15, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 185, 3, 18, 9, 0, 184, 183, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 184, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 17, 1, 0, 0, 0, 188, 190, 5, 1, 0, 0, 189, 188, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 194, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 194, 195, 5, 7, 0, 0, 195, 196, 3, 20, 10, 0, 196, 19, 1, 0, 0, 0, 197, 198, 3, 22, 11, 0, 198, 21, 1, 0, 0, 0, 199, 201, 3, 24, 12, 0, 200, 202, 3, 28, 14, 0, 201, 200, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 23, 1, 0, 0, 0, 203, 205, 5, 1, 0, 0, 204, 203, 1, 0, 0, 0, 205, 208, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 209, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 209, 211, 5, 7, 0, 0, 210, 212, 5, 7, 0, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 216, 1, 0, 0, 0, 213, 215, 5, 1, 0, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 219, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 220, 3, 26, 13, 0, 220, 25, 1, 0, 0, 0, 221, 226, 3, 14, 7, 0, 222, 225, 5, 1, 0, 0, 223, 225, 3, 14, 7, 0, 224, 222, 1, 0, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 27, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 229, 231, 5, 1, 0, 0, 230, 229, 1, 0, 0, 0, 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 235, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 3, 30, 15, 0, 236, 29, 1, 0, 0, 0, 237, 239, 5, 1, 0, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 247, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 244, 3, 32, 16, 0, 244, 245, 3, 4, 2, 0, 245, 248, 1, 0, 0, 0, 246, 248, 3, 6, 3, 0, 247, 243, 1, 0, 0, 0, 247, 246, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 31, 1, 0, 0, 0, 251, 253, 5, 1, 0, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 257, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 261, 5, 8, 0, 0, 258, 260, 7, 2, 0, 0, 259, 258, 1, 0, 0, 0, 260, 263, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 33, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 264, 265, 3, 36, 18, 0, 265, 35, 1, 0, 0, 0, 266, 268, 3, 40, 20, 0, 267, 269, 3, 38, 19, 0, 268, 267, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 37, 1, 0, 0, 0, 270, 271, 3, 74, 37, 0, 271, 272, 3, 4, 2, 0, 272, 275, 1, 0, 0, 0, 273, 275, 3, 6, 3, 0, 274, 270, 1, 0, 0, 0, 274, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 39, 1, 0, 0, 0, 278, 280, 5, 1, 0, 0, 279, 278, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 288, 5, 10, 0, 0, 285, 287, 5, 1, 0, 0, 286, 285, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 293, 3, 46, 23, 0, 292, 291, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 297, 1, 0, 0, 0, 294, 296, 5, 1, 0, 0, 295, 294, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 302, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 303, 3, 54, 27, 0, 301, 303, 3, 56, 28, 0, 302, 300, 1, 0, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 307, 1, 0, 0, 0, 304, 306, 5, 1, 0, 0, 305, 304, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 312, 3, 48, 24, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 316, 1, 0, 0, 0, 313, 315, 5, 1, 0, 0, 314, 313, 1, 0, 0, 0, 315, 318, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 319, 321, 3, 50, 25, 0, 320, 319, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 325, 1, 0, 0, 0, 322, 324, 5, 1, 0, 0, 323, 322, 1, 0, 0, 0, 324, 327, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 328, 330, 5, 18, 0, 0, 329, 328, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 334, 1, 0, 0, 0, 331, 333, 5, 1, 0, 0, 332, 331, 1, 0, 0, 0, 333, 336, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 339, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 337, 340, 3, 42, 21, 0, 338, 340, 3, 44, 22, 0, 339, 337, 1, 0, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 342, 3, 4, 2, 0, 342, 41, 1, 0, 0, 0, 343, 344, 5, 24, 0, 0, 344, 43, 1, 0, 0, 0, 345, 346, 5, 25, 0, 0, 346, 45, 1, 0, 0, 0, 347, 348, 5, 22, 0, 0, 348, 47, 1, 0, 0, 0, 349, 351, 5, 20, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 355, 1, 0, 0, 0, 352, 354, 5, 1, 0, 0, 353, 352, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 3, 52, 26, 0, 359, 49, 1, 0, 0, 0, 360, 364, 5, 21, 0, 0, 361, 363, 5, 1, 0, 0, 362, 361, 1, 0, 0, 0, 363, 366, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 367, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 368, 3, 52, 26, 0, 368, 51, 1, 0, 0, 0, 369, 386, 7, 3, 0, 0, 370, 372, 5, 1, 0, 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 376, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 380, 5, 19, 0, 0, 377, 379, 5, 1, 0, 0, 378, 377, 1, 0, 0, 0, 379, 382, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 383, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 383, 385, 7, 3, 0, 0, 384, 373, 1, 0, 0, 0, 385, 388, 1, 0, 0, 0, 386, 384, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 53, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 389, 397, 5, 26, 0, 0, 390, 392, 5, 1, 0, 0, 391, 390, 1, 0, 0, 0, 392, 395, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 396, 1, 0, 0, 0, 395, 393, 1, 0, 0, 0, 396, 398, 5, 23, 0, 0, 397, 393, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 55, 1, 0, 0, 0, 399, 407, 5, 27, 0, 0, 400, 402, 5, 1, 0, 0, 401, 400, 1, 0, 0, 0, 402, 405, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 406, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 406, 408, 5, 23, 0, 0, 407, 403, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 57, 1, 0, 0, 0, 409, 410, 3, 60, 30, 0, 410, 59, 1, 0, 0, 0, 411, 413, 3, 62, 31, 0, 412, 414, 3, 72, 36, 0, 413, 412, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 61, 1, 0, 0, 0, 415, 417, 5, 1, 0, 0, 416, 415, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 421, 423, 5, 9, 0, 0, 422, 424, 3, 64, 32, 0, 423, 422, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 426, 1, 0, 0, 0, 425, 427, 5, 38, 0, 0, 426, 425, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 429, 1, 0, 0, 0, 428, 430, 3, 66, 33, 0, 429, 428, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 63, 1, 0, 0, 0, 431, 433, 7, 4, 0, 0, 432, 431, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 65, 1, 0, 0, 0, 436, 442, 3, 68, 34, 0, 437, 442, 3, 70, 35, 0, 438, 442, 5, 37, 0, 0, 439, 442, 5, 38, 0, 0, 440, 442, 5, 1, 0, 0, 441, 436, 1, 0, 0, 0, 441, 437, 1, 0, 0, 0, 441, 438, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 67, 1, 0, 0, 0, 445, 446, 5, 35, 0, 0, 446, 69, 1, 0, 0, 0, 447, 448, 5, 36, 0, 0, 448, 71, 1, 0, 0, 0, 449, 450, 3, 74, 37, 0, 450, 451, 3, 4, 2, 0, 451, 454, 1, 0, 0, 0, 452, 454, 3, 6, 3, 0, 453, 449, 1, 0, 0, 0, 453, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 73, 1, 0, 0, 0, 457, 459, 5, 1, 0, 0, 458, 457, 1, 0, 0, 0, 459, 462, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 463, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 463, 467, 5, 8, 0, 0, 464, 466, 7, 2, 0, 0, 465, 464, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 75, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 3, 78, 39, 0, 471, 77, 1, 0, 0, 0, 472, 474, 5, 1, 0, 0, 473, 472, 1, 0, 0, 0, 474, 477, 1, 0, 0, 0, 475, 473, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 478, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 478, 482, 5, 11, 0, 0, 479, 481, 5, 1, 0, 0, 480, 479, 1, 0, 0, 0, 481, 484, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 79, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 485, 486, 3, 82, 41, 0, 486, 81, 1, 0, 0, 0, 487, 489, 5, 1, 0, 0, 488, 487, 1, 0, 0, 0, 489, 492, 1, 0, 0, 0, 490, 488, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 493, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 493, 497, 5, 12, 0, 0, 494, 496, 5, 1, 0, 0, 495, 494, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 83, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 3, 86, 43, 0, 501, 85, 1, 0, 0, 0, 502, 504, 3, 88, 44, 0, 503, 502, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 506, 1, 0, 0, 0, 505, 507, 3, 90, 45, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 509, 3, 92, 46, 0, 509, 510, 3, 96, 48, 0, 510, 512, 3, 102, 51, 0, 511, 513, 3, 106, 53, 0, 512, 511, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 87, 1, 0, 0, 0, 514, 516, 5, 1, 0, 0, 515, 514, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 5, 3, 0, 0, 521, 89, 1, 0, 0, 0, 522, 524, 5, 1, 0, 0, 523, 522, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 528, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 5, 14, 0, 0, 529, 91, 1, 0, 0, 0, 530, 532, 5, 1, 0, 0, 531, 530, 1, 0, 0, 0, 532, 535, 1, 0, 0, 0, 533, 531, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 536, 537, 5, 6, 0, 0, 537, 538, 3, 94, 47, 0, 538, 93, 1, 0, 0, 0, 539, 541, 5, 40, 0, 0, 540, 539, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 95, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 545, 547, 5, 1, 0, 0, 546, 545, 1, 0, 0, 0, 547, 550, 1, 0, 0, 0, 548, 546, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 557, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, 552, 3, 98, 49, 0, 552, 553, 3, 4, 2, 0, 553, 556, 1, 0, 0, 0, 554, 556, 3, 100, 50, 0, 555, 551, 1, 0, 0, 0, 555, 554, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 97, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 564, 5, 8, 0, 0, 561, 563, 7, 5, 0, 0, 562, 561, 1, 0, 0, 0, 563, 566, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 99, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 567, 569, 7, 1, 0, 0, 568, 567, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 568, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 101, 1, 0, 0, 0, 572, 574, 3, 104, 52, 0, 573, 572, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 581, 3, 112, 56, 0, 576, 578, 3, 112, 56, 0, 577, 579, 3, 104, 52, 0, 578, 577, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 581, 1, 0, 0, 0, 580, 573, 1, 0, 0, 0, 580, 576, 1, 0, 0, 0, 581, 103, 1, 0, 0, 0, 582, 584, 5, 1, 0, 0, 583, 582, 1, 0, 0, 0, 584, 587, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 588, 1, 0, 0, 0, 587, 585, 1, 0, 0, 0, 588, 591, 5, 13, 0, 0, 589, 592, 3, 108, 54, 0, 590, 592, 3, 110, 55, 0, 591, 589, 1, 0, 0, 0, 591, 590, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 105, 1, 0, 0, 0, 595, 597, 5, 1, 0, 0, 596, 595, 1, 0, 0, 0, 597, 600, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 601, 1, 0, 0, 0, 600, 598, 1, 0, 0, 0, 601, 604, 5, 16, 0, 0, 602, 605, 3, 108, 54, 0, 603, 605, 3, 110, 55, 0, 604, 602, 1, 0, 0, 0, 604, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 107, 1, 0, 0, 0, 608, 610, 5, 1, 0, 0, 609, 608, 1, 0, 0, 0, 610, 613, 1, 0, 0, 0, 611, 609, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 614, 1, 0, 0, 0, 613, 611, 1, 0, 0, 0, 614, 618, 5, 8, 0, 0, 615, 617, 7, 5, 0, 0, 616, 615, 1, 0, 0, 0, 617, 620, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, 622, 3, 4, 2, 0, 622, 109, 1, 0, 0, 0, 623, 625, 7, 1, 0, 0, 624, 623, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 111, 1, 0, 0, 0, 628, 630, 5, 1, 0, 0, 629, 628, 1, 0, 0, 0, 630, 633, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 634, 1, 0, 0, 0, 633, 631, 1, 0, 0, 0, 634, 635, 5, 15, 0, 0, 635, 113, 1, 0, 0, 0, 636, 637, 3, 116, 58, 0, 637, 115, 1, 0, 0, 0, 638, 640, 5, 1, 0, 0, 639, 638, 1, 0, 0, 0, 640, 643, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 644, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 644, 645, 5, 4, 0, 0, 645, 117, 1, 0, 0, 0, 91, 121, 134, 139, 147, 155, 162, 170, 172, 180, 186, 191, 201, 206, 211, 216, 224, 226, 232, 240, 247, 249, 254, 261, 268, 274, 276, 281, 288, 292, 297, 302, 307, 311, 316, 320, 325, 329, 334, 339, 350, 355, 364, 373, 380, 386, 393, 397, 403, 407, 413, 418, 423, 426, 429, 434, 441, 443, 453, 455, 460, 467, 475, 482, 490, 497, 503, 506, 512, 517, 525, 533, 542, 548, 555, 557, 564, 570, 573, 578, 580, 585, 591, 593, 598, 604, 606, 611, 618, 626, 631, 641] \ No newline at end of file +[4, 1, 40, 655, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 1, 0, 4, 0, 122, 8, 0, 11, 0, 12, 0, 123, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 138, 8, 1, 1, 2, 5, 2, 141, 8, 2, 10, 2, 12, 2, 144, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 3, 3, 150, 8, 3, 1, 4, 4, 4, 153, 8, 4, 11, 4, 12, 4, 154, 1, 5, 1, 5, 1, 5, 1, 6, 5, 6, 161, 8, 6, 10, 6, 12, 6, 164, 9, 6, 1, 6, 1, 6, 5, 6, 168, 8, 6, 10, 6, 12, 6, 171, 9, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 5, 7, 178, 8, 7, 10, 7, 12, 7, 181, 9, 7, 1, 8, 1, 8, 1, 8, 5, 8, 186, 8, 8, 10, 8, 12, 8, 189, 9, 8, 1, 9, 4, 9, 192, 8, 9, 11, 9, 12, 9, 193, 1, 10, 5, 10, 197, 8, 10, 10, 10, 12, 10, 200, 9, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 209, 8, 12, 1, 13, 5, 13, 212, 8, 13, 10, 13, 12, 13, 215, 9, 13, 1, 13, 1, 13, 3, 13, 219, 8, 13, 1, 13, 5, 13, 222, 8, 13, 10, 13, 12, 13, 225, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 232, 8, 14, 10, 14, 12, 14, 235, 9, 14, 1, 15, 5, 15, 238, 8, 15, 10, 15, 12, 15, 241, 9, 15, 1, 15, 1, 15, 1, 16, 5, 16, 246, 8, 16, 10, 16, 12, 16, 249, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 4, 16, 256, 8, 16, 11, 16, 12, 16, 257, 1, 17, 5, 17, 261, 8, 17, 10, 17, 12, 17, 264, 9, 17, 1, 17, 1, 17, 5, 17, 268, 8, 17, 10, 17, 12, 17, 271, 9, 17, 1, 18, 1, 18, 1, 19, 1, 19, 3, 19, 277, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 4, 20, 283, 8, 20, 11, 20, 12, 20, 284, 1, 21, 5, 21, 288, 8, 21, 10, 21, 12, 21, 291, 9, 21, 1, 21, 1, 21, 5, 21, 295, 8, 21, 10, 21, 12, 21, 298, 9, 21, 1, 21, 3, 21, 301, 8, 21, 1, 21, 5, 21, 304, 8, 21, 10, 21, 12, 21, 307, 9, 21, 1, 21, 1, 21, 3, 21, 311, 8, 21, 1, 21, 5, 21, 314, 8, 21, 10, 21, 12, 21, 317, 9, 21, 1, 21, 3, 21, 320, 8, 21, 1, 21, 5, 21, 323, 8, 21, 10, 21, 12, 21, 326, 9, 21, 1, 21, 3, 21, 329, 8, 21, 1, 21, 5, 21, 332, 8, 21, 10, 21, 12, 21, 335, 9, 21, 1, 21, 3, 21, 338, 8, 21, 1, 21, 5, 21, 341, 8, 21, 10, 21, 12, 21, 344, 9, 21, 1, 21, 1, 21, 3, 21, 348, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 3, 25, 359, 8, 25, 1, 25, 5, 25, 362, 8, 25, 10, 25, 12, 25, 365, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 5, 26, 371, 8, 26, 10, 26, 12, 26, 374, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 5, 27, 380, 8, 27, 10, 27, 12, 27, 383, 9, 27, 1, 27, 1, 27, 5, 27, 387, 8, 27, 10, 27, 12, 27, 390, 9, 27, 1, 27, 5, 27, 393, 8, 27, 10, 27, 12, 27, 396, 9, 27, 1, 28, 1, 28, 5, 28, 400, 8, 28, 10, 28, 12, 28, 403, 9, 28, 1, 28, 3, 28, 406, 8, 28, 1, 29, 1, 29, 5, 29, 410, 8, 29, 10, 29, 12, 29, 413, 9, 29, 1, 29, 3, 29, 416, 8, 29, 1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 422, 8, 31, 1, 32, 5, 32, 425, 8, 32, 10, 32, 12, 32, 428, 9, 32, 1, 32, 1, 32, 3, 32, 432, 8, 32, 1, 32, 3, 32, 435, 8, 32, 1, 32, 3, 32, 438, 8, 32, 1, 33, 4, 33, 441, 8, 33, 11, 33, 12, 33, 442, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 4, 34, 450, 8, 34, 11, 34, 12, 34, 451, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 462, 8, 37, 11, 37, 12, 37, 463, 1, 38, 5, 38, 467, 8, 38, 10, 38, 12, 38, 470, 9, 38, 1, 38, 1, 38, 5, 38, 474, 8, 38, 10, 38, 12, 38, 477, 9, 38, 1, 39, 1, 39, 1, 40, 5, 40, 482, 8, 40, 10, 40, 12, 40, 485, 9, 40, 1, 40, 1, 40, 5, 40, 489, 8, 40, 10, 40, 12, 40, 492, 9, 40, 1, 41, 1, 41, 1, 42, 5, 42, 497, 8, 42, 10, 42, 12, 42, 500, 9, 42, 1, 42, 1, 42, 5, 42, 504, 8, 42, 10, 42, 12, 42, 507, 9, 42, 1, 43, 1, 43, 1, 44, 3, 44, 512, 8, 44, 1, 44, 3, 44, 515, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 521, 8, 44, 1, 45, 5, 45, 524, 8, 45, 10, 45, 12, 45, 527, 9, 45, 1, 45, 1, 45, 1, 46, 5, 46, 532, 8, 46, 10, 46, 12, 46, 535, 9, 46, 1, 46, 1, 46, 1, 47, 5, 47, 540, 8, 47, 10, 47, 12, 47, 543, 9, 47, 1, 47, 1, 47, 1, 47, 1, 48, 5, 48, 549, 8, 48, 10, 48, 12, 48, 552, 9, 48, 1, 49, 5, 49, 555, 8, 49, 10, 49, 12, 49, 558, 9, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 564, 8, 49, 10, 49, 12, 49, 567, 9, 49, 1, 50, 1, 50, 5, 50, 571, 8, 50, 10, 50, 12, 50, 574, 9, 50, 1, 51, 4, 51, 577, 8, 51, 11, 51, 12, 51, 578, 1, 52, 3, 52, 582, 8, 52, 1, 52, 1, 52, 1, 52, 3, 52, 587, 8, 52, 3, 52, 589, 8, 52, 1, 53, 5, 53, 592, 8, 53, 10, 53, 12, 53, 595, 9, 53, 1, 53, 1, 53, 1, 53, 4, 53, 600, 8, 53, 11, 53, 12, 53, 601, 1, 54, 5, 54, 605, 8, 54, 10, 54, 12, 54, 608, 9, 54, 1, 54, 1, 54, 1, 54, 4, 54, 613, 8, 54, 11, 54, 12, 54, 614, 1, 55, 5, 55, 618, 8, 55, 10, 55, 12, 55, 621, 9, 55, 1, 55, 1, 55, 5, 55, 625, 8, 55, 10, 55, 12, 55, 628, 9, 55, 1, 55, 1, 55, 1, 56, 4, 56, 633, 8, 56, 11, 56, 12, 56, 634, 1, 57, 5, 57, 638, 8, 57, 10, 57, 12, 57, 641, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 5, 59, 648, 8, 59, 10, 59, 12, 59, 651, 9, 59, 1, 59, 1, 59, 1, 59, 1, 123, 0, 60, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 0, 6, 1, 1, 2, 2, 2, 0, 1, 1, 17, 17, 2, 0, 1, 1, 31, 33, 1, 0, 26, 27, 2, 0, 1, 1, 37, 37, 2, 0, 1, 1, 33, 33, 700, 0, 121, 1, 0, 0, 0, 2, 137, 1, 0, 0, 0, 4, 142, 1, 0, 0, 0, 6, 147, 1, 0, 0, 0, 8, 152, 1, 0, 0, 0, 10, 156, 1, 0, 0, 0, 12, 162, 1, 0, 0, 0, 14, 174, 1, 0, 0, 0, 16, 182, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 198, 1, 0, 0, 0, 22, 204, 1, 0, 0, 0, 24, 206, 1, 0, 0, 0, 26, 213, 1, 0, 0, 0, 28, 228, 1, 0, 0, 0, 30, 239, 1, 0, 0, 0, 32, 247, 1, 0, 0, 0, 34, 262, 1, 0, 0, 0, 36, 272, 1, 0, 0, 0, 38, 274, 1, 0, 0, 0, 40, 282, 1, 0, 0, 0, 42, 289, 1, 0, 0, 0, 44, 351, 1, 0, 0, 0, 46, 353, 1, 0, 0, 0, 48, 355, 1, 0, 0, 0, 50, 358, 1, 0, 0, 0, 52, 368, 1, 0, 0, 0, 54, 377, 1, 0, 0, 0, 56, 397, 1, 0, 0, 0, 58, 407, 1, 0, 0, 0, 60, 417, 1, 0, 0, 0, 62, 419, 1, 0, 0, 0, 64, 426, 1, 0, 0, 0, 66, 440, 1, 0, 0, 0, 68, 449, 1, 0, 0, 0, 70, 453, 1, 0, 0, 0, 72, 455, 1, 0, 0, 0, 74, 461, 1, 0, 0, 0, 76, 468, 1, 0, 0, 0, 78, 478, 1, 0, 0, 0, 80, 483, 1, 0, 0, 0, 82, 493, 1, 0, 0, 0, 84, 498, 1, 0, 0, 0, 86, 508, 1, 0, 0, 0, 88, 511, 1, 0, 0, 0, 90, 525, 1, 0, 0, 0, 92, 533, 1, 0, 0, 0, 94, 541, 1, 0, 0, 0, 96, 550, 1, 0, 0, 0, 98, 556, 1, 0, 0, 0, 100, 568, 1, 0, 0, 0, 102, 576, 1, 0, 0, 0, 104, 588, 1, 0, 0, 0, 106, 593, 1, 0, 0, 0, 108, 606, 1, 0, 0, 0, 110, 619, 1, 0, 0, 0, 112, 632, 1, 0, 0, 0, 114, 639, 1, 0, 0, 0, 116, 644, 1, 0, 0, 0, 118, 649, 1, 0, 0, 0, 120, 122, 3, 2, 1, 0, 121, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 126, 5, 0, 0, 1, 126, 1, 1, 0, 0, 0, 127, 138, 5, 2, 0, 0, 128, 138, 3, 10, 5, 0, 129, 138, 3, 22, 11, 0, 130, 138, 3, 60, 30, 0, 131, 138, 3, 36, 18, 0, 132, 138, 3, 78, 39, 0, 133, 138, 3, 82, 41, 0, 134, 138, 3, 86, 43, 0, 135, 138, 3, 116, 58, 0, 136, 138, 3, 6, 3, 0, 137, 127, 1, 0, 0, 0, 137, 128, 1, 0, 0, 0, 137, 129, 1, 0, 0, 0, 137, 130, 1, 0, 0, 0, 137, 131, 1, 0, 0, 0, 137, 132, 1, 0, 0, 0, 137, 133, 1, 0, 0, 0, 137, 134, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 136, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 141, 5, 1, 0, 0, 140, 139, 1, 0, 0, 0, 141, 144, 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, 145, 146, 7, 0, 0, 0, 146, 5, 1, 0, 0, 0, 147, 149, 5, 5, 0, 0, 148, 150, 5, 2, 0, 0, 149, 148, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 7, 1, 0, 0, 0, 151, 153, 7, 1, 0, 0, 152, 151, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 154, 155, 1, 0, 0, 0, 155, 9, 1, 0, 0, 0, 156, 157, 3, 12, 6, 0, 157, 158, 3, 18, 9, 0, 158, 11, 1, 0, 0, 0, 159, 161, 5, 1, 0, 0, 160, 159, 1, 0, 0, 0, 161, 164, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 165, 169, 5, 7, 0, 0, 166, 168, 5, 1, 0, 0, 167, 166, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 3, 14, 7, 0, 173, 13, 1, 0, 0, 0, 174, 179, 3, 16, 8, 0, 175, 178, 5, 1, 0, 0, 176, 178, 3, 16, 8, 0, 177, 175, 1, 0, 0, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 15, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 187, 5, 29, 0, 0, 183, 184, 5, 30, 0, 0, 184, 186, 5, 29, 0, 0, 185, 183, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 17, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 192, 3, 20, 10, 0, 191, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 19, 1, 0, 0, 0, 195, 197, 5, 1, 0, 0, 196, 195, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 201, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 201, 202, 5, 7, 0, 0, 202, 203, 3, 22, 11, 0, 203, 21, 1, 0, 0, 0, 204, 205, 3, 24, 12, 0, 205, 23, 1, 0, 0, 0, 206, 208, 3, 26, 13, 0, 207, 209, 3, 30, 15, 0, 208, 207, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 25, 1, 0, 0, 0, 210, 212, 5, 1, 0, 0, 211, 210, 1, 0, 0, 0, 212, 215, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 216, 1, 0, 0, 0, 215, 213, 1, 0, 0, 0, 216, 218, 5, 7, 0, 0, 217, 219, 5, 7, 0, 0, 218, 217, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 223, 1, 0, 0, 0, 220, 222, 5, 1, 0, 0, 221, 220, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 226, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 3, 28, 14, 0, 227, 27, 1, 0, 0, 0, 228, 233, 3, 16, 8, 0, 229, 232, 5, 1, 0, 0, 230, 232, 3, 16, 8, 0, 231, 229, 1, 0, 0, 0, 231, 230, 1, 0, 0, 0, 232, 235, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 29, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 236, 238, 5, 1, 0, 0, 237, 236, 1, 0, 0, 0, 238, 241, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 242, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 242, 243, 3, 32, 16, 0, 243, 31, 1, 0, 0, 0, 244, 246, 5, 1, 0, 0, 245, 244, 1, 0, 0, 0, 246, 249, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 255, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 250, 251, 3, 34, 17, 0, 251, 252, 3, 4, 2, 0, 252, 256, 1, 0, 0, 0, 253, 256, 3, 8, 4, 0, 254, 256, 3, 6, 3, 0, 255, 250, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 255, 254, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 33, 1, 0, 0, 0, 259, 261, 5, 1, 0, 0, 260, 259, 1, 0, 0, 0, 261, 264, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 265, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 265, 269, 5, 8, 0, 0, 266, 268, 7, 2, 0, 0, 267, 266, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 35, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 273, 3, 38, 19, 0, 273, 37, 1, 0, 0, 0, 274, 276, 3, 42, 21, 0, 275, 277, 3, 40, 20, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 39, 1, 0, 0, 0, 278, 279, 3, 76, 38, 0, 279, 280, 3, 4, 2, 0, 280, 283, 1, 0, 0, 0, 281, 283, 3, 8, 4, 0, 282, 278, 1, 0, 0, 0, 282, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 41, 1, 0, 0, 0, 286, 288, 5, 1, 0, 0, 287, 286, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 296, 5, 10, 0, 0, 293, 295, 5, 1, 0, 0, 294, 293, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 301, 3, 48, 24, 0, 300, 299, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 305, 1, 0, 0, 0, 302, 304, 5, 1, 0, 0, 303, 302, 1, 0, 0, 0, 304, 307, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 310, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 308, 311, 3, 56, 28, 0, 309, 311, 3, 58, 29, 0, 310, 308, 1, 0, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 315, 1, 0, 0, 0, 312, 314, 5, 1, 0, 0, 313, 312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 320, 3, 50, 25, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 324, 1, 0, 0, 0, 321, 323, 5, 1, 0, 0, 322, 321, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 327, 329, 3, 52, 26, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 333, 1, 0, 0, 0, 330, 332, 5, 1, 0, 0, 331, 330, 1, 0, 0, 0, 332, 335, 1, 0, 0, 0, 333, 331, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 337, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 336, 338, 5, 18, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 342, 1, 0, 0, 0, 339, 341, 5, 1, 0, 0, 340, 339, 1, 0, 0, 0, 341, 344, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 347, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 345, 348, 3, 44, 22, 0, 346, 348, 3, 46, 23, 0, 347, 345, 1, 0, 0, 0, 347, 346, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 350, 3, 4, 2, 0, 350, 43, 1, 0, 0, 0, 351, 352, 5, 24, 0, 0, 352, 45, 1, 0, 0, 0, 353, 354, 5, 25, 0, 0, 354, 47, 1, 0, 0, 0, 355, 356, 5, 22, 0, 0, 356, 49, 1, 0, 0, 0, 357, 359, 5, 20, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 363, 1, 0, 0, 0, 360, 362, 5, 1, 0, 0, 361, 360, 1, 0, 0, 0, 362, 365, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 367, 3, 54, 27, 0, 367, 51, 1, 0, 0, 0, 368, 372, 5, 21, 0, 0, 369, 371, 5, 1, 0, 0, 370, 369, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 375, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 376, 3, 54, 27, 0, 376, 53, 1, 0, 0, 0, 377, 394, 7, 3, 0, 0, 378, 380, 5, 1, 0, 0, 379, 378, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 388, 5, 19, 0, 0, 385, 387, 5, 1, 0, 0, 386, 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 391, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, 393, 7, 3, 0, 0, 392, 381, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 55, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 405, 5, 26, 0, 0, 398, 400, 5, 1, 0, 0, 399, 398, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 406, 5, 23, 0, 0, 405, 401, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 57, 1, 0, 0, 0, 407, 415, 5, 27, 0, 0, 408, 410, 5, 1, 0, 0, 409, 408, 1, 0, 0, 0, 410, 413, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 414, 416, 5, 23, 0, 0, 415, 411, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 59, 1, 0, 0, 0, 417, 418, 3, 62, 31, 0, 418, 61, 1, 0, 0, 0, 419, 421, 3, 64, 32, 0, 420, 422, 3, 74, 37, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 63, 1, 0, 0, 0, 423, 425, 5, 1, 0, 0, 424, 423, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 429, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 429, 431, 5, 9, 0, 0, 430, 432, 3, 66, 33, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, 0, 0, 433, 435, 5, 38, 0, 0, 434, 433, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 437, 1, 0, 0, 0, 436, 438, 3, 68, 34, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 65, 1, 0, 0, 0, 439, 441, 7, 4, 0, 0, 440, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 67, 1, 0, 0, 0, 444, 450, 3, 70, 35, 0, 445, 450, 3, 72, 36, 0, 446, 450, 5, 37, 0, 0, 447, 450, 5, 38, 0, 0, 448, 450, 5, 1, 0, 0, 449, 444, 1, 0, 0, 0, 449, 445, 1, 0, 0, 0, 449, 446, 1, 0, 0, 0, 449, 447, 1, 0, 0, 0, 449, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 69, 1, 0, 0, 0, 453, 454, 5, 35, 0, 0, 454, 71, 1, 0, 0, 0, 455, 456, 5, 36, 0, 0, 456, 73, 1, 0, 0, 0, 457, 458, 3, 76, 38, 0, 458, 459, 3, 4, 2, 0, 459, 462, 1, 0, 0, 0, 460, 462, 3, 8, 4, 0, 461, 457, 1, 0, 0, 0, 461, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 75, 1, 0, 0, 0, 465, 467, 5, 1, 0, 0, 466, 465, 1, 0, 0, 0, 467, 470, 1, 0, 0, 0, 468, 466, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 471, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 475, 5, 8, 0, 0, 472, 474, 7, 2, 0, 0, 473, 472, 1, 0, 0, 0, 474, 477, 1, 0, 0, 0, 475, 473, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 77, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 478, 479, 3, 80, 40, 0, 479, 79, 1, 0, 0, 0, 480, 482, 5, 1, 0, 0, 481, 480, 1, 0, 0, 0, 482, 485, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 486, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 486, 490, 5, 11, 0, 0, 487, 489, 5, 1, 0, 0, 488, 487, 1, 0, 0, 0, 489, 492, 1, 0, 0, 0, 490, 488, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 81, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 493, 494, 3, 84, 42, 0, 494, 83, 1, 0, 0, 0, 495, 497, 5, 1, 0, 0, 496, 495, 1, 0, 0, 0, 497, 500, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 501, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 501, 505, 5, 12, 0, 0, 502, 504, 5, 1, 0, 0, 503, 502, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 85, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 3, 88, 44, 0, 509, 87, 1, 0, 0, 0, 510, 512, 3, 90, 45, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 515, 3, 92, 46, 0, 514, 513, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 94, 47, 0, 517, 518, 3, 98, 49, 0, 518, 520, 3, 104, 52, 0, 519, 521, 3, 108, 54, 0, 520, 519, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 89, 1, 0, 0, 0, 522, 524, 5, 1, 0, 0, 523, 522, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 528, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 5, 3, 0, 0, 529, 91, 1, 0, 0, 0, 530, 532, 5, 1, 0, 0, 531, 530, 1, 0, 0, 0, 532, 535, 1, 0, 0, 0, 533, 531, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 536, 537, 5, 14, 0, 0, 537, 93, 1, 0, 0, 0, 538, 540, 5, 1, 0, 0, 539, 538, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 544, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 545, 5, 6, 0, 0, 545, 546, 3, 96, 48, 0, 546, 95, 1, 0, 0, 0, 547, 549, 5, 40, 0, 0, 548, 547, 1, 0, 0, 0, 549, 552, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 97, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 553, 555, 5, 1, 0, 0, 554, 553, 1, 0, 0, 0, 555, 558, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 565, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 559, 560, 3, 100, 50, 0, 560, 561, 3, 4, 2, 0, 561, 564, 1, 0, 0, 0, 562, 564, 3, 102, 51, 0, 563, 559, 1, 0, 0, 0, 563, 562, 1, 0, 0, 0, 564, 567, 1, 0, 0, 0, 565, 563, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 99, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 568, 572, 5, 8, 0, 0, 569, 571, 7, 5, 0, 0, 570, 569, 1, 0, 0, 0, 571, 574, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 101, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 577, 7, 1, 0, 0, 576, 575, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 103, 1, 0, 0, 0, 580, 582, 3, 106, 53, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 589, 3, 114, 57, 0, 584, 586, 3, 114, 57, 0, 585, 587, 3, 106, 53, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 581, 1, 0, 0, 0, 588, 584, 1, 0, 0, 0, 589, 105, 1, 0, 0, 0, 590, 592, 5, 1, 0, 0, 591, 590, 1, 0, 0, 0, 592, 595, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 596, 599, 5, 13, 0, 0, 597, 600, 3, 110, 55, 0, 598, 600, 3, 112, 56, 0, 599, 597, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 107, 1, 0, 0, 0, 603, 605, 5, 1, 0, 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 612, 5, 16, 0, 0, 610, 613, 3, 110, 55, 0, 611, 613, 3, 112, 56, 0, 612, 610, 1, 0, 0, 0, 612, 611, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 109, 1, 0, 0, 0, 616, 618, 5, 1, 0, 0, 617, 616, 1, 0, 0, 0, 618, 621, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 622, 626, 5, 8, 0, 0, 623, 625, 7, 5, 0, 0, 624, 623, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 630, 3, 4, 2, 0, 630, 111, 1, 0, 0, 0, 631, 633, 7, 1, 0, 0, 632, 631, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 632, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 113, 1, 0, 0, 0, 636, 638, 5, 1, 0, 0, 637, 636, 1, 0, 0, 0, 638, 641, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 642, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 642, 643, 5, 15, 0, 0, 643, 115, 1, 0, 0, 0, 644, 645, 3, 118, 59, 0, 645, 117, 1, 0, 0, 0, 646, 648, 5, 1, 0, 0, 647, 646, 1, 0, 0, 0, 648, 651, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 652, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 653, 5, 4, 0, 0, 653, 119, 1, 0, 0, 0, 92, 123, 137, 142, 149, 154, 162, 169, 177, 179, 187, 193, 198, 208, 213, 218, 223, 231, 233, 239, 247, 255, 257, 262, 269, 276, 282, 284, 289, 296, 300, 305, 310, 315, 319, 324, 328, 333, 337, 342, 347, 358, 363, 372, 381, 388, 394, 401, 405, 411, 415, 421, 426, 431, 434, 437, 442, 449, 451, 461, 463, 468, 475, 483, 490, 498, 505, 511, 514, 520, 525, 533, 541, 550, 556, 563, 565, 572, 578, 581, 586, 588, 593, 599, 601, 606, 612, 614, 619, 626, 634, 639, 649] \ No newline at end of file diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseListener.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseListener.cs index 3ef9f599bd..cfda46e9da 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseListener.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseListener.cs @@ -72,6 +72,18 @@ public virtual void EnterNewline([NotNull] LUFileParser.NewlineContext context) /// The parse tree. public virtual void ExitNewline([NotNull] LUFileParser.NewlineContext context) { } /// + /// Enter a parse tree produced by . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void EnterCommentDefinition([NotNull] LUFileParser.CommentDefinitionContext context) { } + /// + /// Exit a parse tree produced by . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void ExitCommentDefinition([NotNull] LUFileParser.CommentDefinitionContext context) { } + /// /// Enter a parse tree produced by . /// The default implementation does nothing. /// diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseVisitor.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseVisitor.cs index 0a0afd5f70..4ed46140b1 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseVisitor.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserBaseVisitor.cs @@ -65,6 +65,16 @@ public partial class LUFileParserBaseVisitor : AbstractParseTreeVisitor< /// The visitor result. public virtual Result VisitNewline([NotNull] LUFileParser.NewlineContext context) { return VisitChildren(context); } /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCommentDefinition([NotNull] LUFileParser.CommentDefinitionContext context) { return VisitChildren(context); } + /// /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserListener.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserListener.cs index 91a6339330..eb1877bd78 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserListener.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserListener.cs @@ -61,6 +61,16 @@ public interface ILUFileParserListener : IParseTreeListener { /// The parse tree. void ExitNewline([NotNull] LUFileParser.NewlineContext context); /// + /// Enter a parse tree produced by . + /// + /// The parse tree. + void EnterCommentDefinition([NotNull] LUFileParser.CommentDefinitionContext context); + /// + /// Exit a parse tree produced by . + /// + /// The parse tree. + void ExitCommentDefinition([NotNull] LUFileParser.CommentDefinitionContext context); + /// /// Enter a parse tree produced by . /// /// The parse tree. diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserVisitor.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserVisitor.cs index 04fb2c9fc4..c7eb84327c 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserVisitor.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParserVisitor.cs @@ -50,6 +50,12 @@ public interface ILUFileParserVisitor : IParseTreeVisitor { /// The visitor result. Result VisitNewline([NotNull] LUFileParser.NewlineContext context); /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitCommentDefinition([NotNull] LUFileParser.CommentDefinitionContext context); + /// /// Visit a parse tree produced by . /// /// The parse tree. diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 index 94403d2951..0e61614022 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 @@ -54,7 +54,7 @@ MODEL_INFO ; COMMENT - : WS* '>' ~('\r'|'\n')* -> skip + : WS* '>' ~('\r'|'\n')* ; QNA diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 index c23e44e9db..e9876722f3 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 @@ -16,6 +16,7 @@ paragraph | referenceSection | qnaSection | modelInfoSection + | commentDefinition ; // Treat EOF as newline to hanle file end gracefully @@ -25,6 +26,10 @@ newline : WS* (NEWLINE | EOF) ; +commentDefinition + : COMMENT NEWLINE? + ; + errorString : (WS|INVALID_TOKEN_DEFAULT_MODE)+ ; @@ -74,7 +79,7 @@ intentBody ; normalIntentBody - : WS* ((normalIntentString newline) | errorString)+ + : WS* ((normalIntentString newline) | errorString | commentDefinition)+ ; normalIntentString diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.json new file mode 100644 index 0000000000..e83475d3bb --- /dev/null +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.json @@ -0,0 +1,5 @@ +{ + "sections": [], + "content": "> This is a comment\n> This is another comment", + "errors": [] +} \ No newline at end of file diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.txt b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.txt new file mode 100644 index 0000000000..c6593bdb00 --- /dev/null +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/AllComments.txt @@ -0,0 +1,2 @@ +> This is a comment +> This is another comment \ No newline at end of file diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json index e93dcb50d0..79c87b0fa4 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json @@ -161,11 +161,11 @@ "errorMsgs": [ ], - "contextText": "- Please set {deviceTemperature = thermostat to 72}", + "contextText": " - Please set {deviceTemperature = thermostat to 72}", "range": { "Start": { "Line": 17, - "Character": 4 + "Character": 0 }, "End": { "Line": 17, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Windows.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Windows.json index 32dd6b2ae5a7ce6f1020a5976885942acde7e90e..f58d0dc4faaae394e4fb882e95623435b274013b 100644 GIT binary patch delta 37 vcmV+=0NVeQlm?uX2C#@Dm(V`}442en0b-NxBhZ)dI{|`&Kqa?8B>~iAF7^+a delta 44 zcmV+{0Mq}Rlm?WP2C#@DlRyRpvy>w;0h90qAd?{WV3UX>K9|@*0iJ^*CbuFc0s3Qo CQxM(& diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json index 4fb9dd3bd7..41bfee8909 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json @@ -52,7 +52,7 @@ "Severity": "ERROR" }, { - "Message": "syntax error: extraneous input 'ml' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", + "Message": "syntax error: extraneous input 'ml' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, COMMENT, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", "Range": { "Start": { "Line": 2, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json index 49e5287375..ed8891d6e8 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json @@ -52,7 +52,7 @@ "Severity": "ERROR" }, { - "Message": "syntax error: extraneous input 'regex' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", + "Message": "syntax error: extraneous input 'regex' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, COMMENT, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", "Range": { "Start": { "Line": 2, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json index 2480fe39d9..2f560c31e2 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json @@ -37,7 +37,7 @@ "Severity": "ERROR" }, { - "Message": "syntax error: extraneous input 'abc' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", + "Message": "syntax error: extraneous input 'abc' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, COMMENT, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", "Range": { "Start": { "Line": 2, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU278.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU278.json index 8e6602a698..ed876a60f6 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU278.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU278.json @@ -1 +1,463 @@ -{"Sections":[{"Errors":[],"SectionType":"simpleIntentSection","Id":"simpleIntentSection_getUserName","Body":"- call me {name:userName}\r\n- I'm {name:userName}\r\n- my name is {name:userName}\r\n","UtteranceAndEntitiesMap":[{"utterance":"call me {name:userName}","entities":[{"type":"patternAnyEntities","entity":"name","role":"userName"}],"errorMsgs":[],"contextText":"- call me {name:userName}","range":{"Start":{"Line":3,"Character":0},"End":{"Line":3,"Character":25}}},{"utterance":"I'm {name:userName}","entities":[{"type":"patternAnyEntities","entity":"name","role":"userName"}],"errorMsgs":[],"contextText":"- I'm {name:userName}","range":{"Start":{"Line":4,"Character":0},"End":{"Line":4,"Character":21}}},{"utterance":"my name is {name:userName}","entities":[{"type":"patternAnyEntities","entity":"name","role":"userName"}],"errorMsgs":[],"contextText":"- my name is {name:userName}","range":{"Start":{"Line":5,"Character":0},"End":{"Line":5,"Character":28}}}],"Entities":[],"Name":"getUserName","IntentNameLine":"# getUserName","Range":{"Start":{"Line":2,"Character":0},"End":{"Line":6,"Character":0}}},{"Errors":[],"SectionType":"simpleIntentSection","Id":"simpleIntentSection_getUserFirstName","Body":"> this is another role for the same 'name' entity\r\n- [[my] first name is] {name:userFirstName}\r\n","UtteranceAndEntitiesMap":[{"utterance":"[[my] first name is] {name:userFirstName}","entities":[{"type":"patternAnyEntities","entity":"name","role":"userFirstName"}],"errorMsgs":[],"contextText":"- [[my] first name is] {name:userFirstName}","range":{"Start":{"Line":9,"Character":0},"End":{"Line":9,"Character":43}}}],"Entities":[],"Name":"getUserFirstName","IntentNameLine":"# getUserFirstName","Range":{"Start":{"Line":7,"Character":0},"End":{"Line":10,"Character":0}}},{"Errors":[],"SectionType":"simpleIntentSection","Id":"simpleIntentSection_BookFlight","Body":"> roles can be specified for list entity types as well - in this case fromCity and toCity are added as roles to the 'city' list entity defined further below\r\n- book flight from {city:fromCity} to {city:toCity}\r\n- [can you] get me a flight from {city:fromCity} to {city:toCity}\r\n- get me a flight to {city:toCity}\r\n- I need to fly from {city:fromCity}\r\n\r\n$city:Seattle=\r\n- Seattle\r\n- Tacoma\r\n- SeaTac\r\n- SEA\r\n\r\n$city:Portland=\r\n- Portland\r\n- PDX\r\n","UtteranceAndEntitiesMap":[{"utterance":"book flight from {city:fromCity} to {city:toCity}","entities":[{"type":"patternAnyEntities","entity":"city","role":"fromCity"},{"type":"patternAnyEntities","entity":"city","role":"toCity"}],"errorMsgs":[],"contextText":"- book flight from {city:fromCity} to {city:toCity}","range":{"Start":{"Line":13,"Character":0},"End":{"Line":13,"Character":51}}},{"utterance":"[can you] get me a flight from {city:fromCity} to {city:toCity}","entities":[{"type":"patternAnyEntities","entity":"city","role":"fromCity"},{"type":"patternAnyEntities","entity":"city","role":"toCity"}],"errorMsgs":[],"contextText":"- [can you] get me a flight from {city:fromCity} to {city:toCity}","range":{"Start":{"Line":14,"Character":0},"End":{"Line":14,"Character":65}}},{"utterance":"get me a flight to {city:toCity}","entities":[{"type":"patternAnyEntities","entity":"city","role":"toCity"}],"errorMsgs":[],"contextText":"- get me a flight to {city:toCity}","range":{"Start":{"Line":15,"Character":0},"End":{"Line":15,"Character":34}}},{"utterance":"I need to fly from {city:fromCity}","entities":[{"type":"patternAnyEntities","entity":"city","role":"fromCity"}],"errorMsgs":[],"contextText":"- I need to fly from {city:fromCity}","range":{"Start":{"Line":16,"Character":0},"End":{"Line":16,"Character":36}}}],"Entities":[{"Errors":[],"SectionType":"entitySection","Id":"entitySection_city","Body":"","Name":"city","Type":"Seattle=","SynonymsOrPhraseList":["Seattle","Tacoma","SeaTac","SEA"],"Range":{"Start":{"Line":18,"Character":0},"End":{"Line":22,"Character":6}}},{"Errors":[],"SectionType":"entitySection","Id":"entitySection_city","Body":"","Name":"city","Type":"Portland=","SynonymsOrPhraseList":["Portland","PDX"],"Range":{"Start":{"Line":24,"Character":0},"End":{"Line":26,"Character":6}}}],"Name":"BookFlight","IntentNameLine":"# BookFlight","Range":{"Start":{"Line":11,"Character":0},"End":{"Line":27,"Character":0}}},{"Errors":[],"SectionType":"simpleIntentSection","Id":"simpleIntentSection_setAlarm","Body":"> prebuilt entitities can have roles as well.\r\n- create alarm for {datetimeV2:startTime}\r\n","UtteranceAndEntitiesMap":[{"utterance":"create alarm for {datetimeV2:startTime}","entities":[{"type":"patternAnyEntities","entity":"datetimeV2","role":"startTime"}],"errorMsgs":[],"contextText":"- create alarm for {datetimeV2:startTime}","range":{"Start":{"Line":30,"Character":0},"End":{"Line":30,"Character":41}}}],"Entities":[],"Name":"setAlarm","IntentNameLine":"# setAlarm","Range":{"Start":{"Line":28,"Character":0},"End":{"Line":31,"Character":0}}},{"Errors":[],"SectionType":"simpleIntentSection","Id":"simpleIntentSection_deleteAlarm","Body":"- remove the {datetimeV2:deleteTime} alarm\r\n\r\n> This is just defining datetimeV2 as a prebuilt entity type. If an explicit type is not specified, by default entities in patterns will be set to pattern.any entity type\r\n$PREBUILT:datetimeV2\r\n","UtteranceAndEntitiesMap":[{"utterance":"remove the {datetimeV2:deleteTime} alarm","entities":[{"type":"patternAnyEntities","entity":"datetimeV2","role":"deleteTime"}],"errorMsgs":[],"contextText":"- remove the {datetimeV2:deleteTime} alarm","range":{"Start":{"Line":33,"Character":0},"End":{"Line":33,"Character":42}}}],"Entities":[{"Errors":[],"SectionType":"entitySection","Id":"entitySection_PREBUILT","Body":"","Name":"PREBUILT","Type":"datetimeV2","SynonymsOrPhraseList":[],"Range":{"Start":{"Line":36,"Character":0},"End":{"Line":36,"Character":20}}}],"Name":"deleteAlarm","IntentNameLine":"# deleteAlarm","Range":{"Start":{"Line":32,"Character":0},"End":{"Line":37,"Character":0}}},{"Errors":[],"SectionType":"simpleIntentSection","Id":"simpleIntentSection_randomTestIntent","Body":"- test {entity:foo}\r\n\r\n$entity: simple\r\n\r\n","UtteranceAndEntitiesMap":[{"utterance":"test {entity:foo}","entities":[{"type":"patternAnyEntities","entity":"entity","role":"foo"}],"errorMsgs":[],"contextText":"- test {entity:foo}","range":{"Start":{"Line":39,"Character":0},"End":{"Line":39,"Character":19}}}],"Entities":[{"Errors":[],"SectionType":"entitySection","Id":"entitySection_entity","Body":"","Name":"entity","Type":"simple","SynonymsOrPhraseList":[],"Range":{"Start":{"Line":41,"Character":0},"End":{"Line":41,"Character":15}}}],"Name":"randomTestIntent","IntentNameLine":"# randomTestIntent","Range":{"Start":{"Line":38,"Character":0},"End":{"Line":43,"Character":0}}}],"Content":"> You can use roles in patterns using the entityName:role notation.\n# getUserName\n- call me {name:userName}\n- I'm {name:userName}\n- my name is {name:userName}\n\n# getUserFirstName\n> this is another role for the same 'name' entity\n- [[my] first name is] {name:userFirstName}\n\n# BookFlight\n> roles can be specified for list entity types as well - in this case fromCity and toCity are added as roles to the 'city' list entity defined further below\n- book flight from {city:fromCity} to {city:toCity}\n- [can you] get me a flight from {city:fromCity} to {city:toCity}\n- get me a flight to {city:toCity}\n- I need to fly from {city:fromCity}\n\n$city:Seattle=\n- Seattle\n- Tacoma\n- SeaTac\n- SEA\n\n$city:Portland=\n- Portland\n- PDX\n\n# setAlarm\n> prebuilt entitities can have roles as well.\n- create alarm for {datetimeV2:startTime}\n\n# deleteAlarm\n- remove the {datetimeV2:deleteTime} alarm\n\n> This is just defining datetimeV2 as a prebuilt entity type. If an explicit type is not specified, by default entities in patterns will be set to pattern.any entity type\n$PREBUILT:datetimeV2\n\n# randomTestIntent\n- test {entity:foo}\n\n$entity: simple\n\n","Errors":[]} \ No newline at end of file +{ + "Sections": [ + { + "Errors": [], + "SectionType": "simpleIntentSection", + "Id": "simpleIntentSection_getUserName", + "Body": "- call me {name:userName}\r\n- I'm {name:userName}\r\n- my name is {name:userName}\r\n", + "UtteranceAndEntitiesMap": [ + { + "utterance": "call me {name:userName}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "name", + "role": "userName" + } + ], + "errorMsgs": [], + "contextText": "- call me {name:userName}", + "range": { + "Start": { + "Line": 3, + "Character": 0 + }, + "End": { + "Line": 3, + "Character": 25 + } + } + }, + { + "utterance": "I'm {name:userName}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "name", + "role": "userName" + } + ], + "errorMsgs": [], + "contextText": "- I'm {name:userName}", + "range": { + "Start": { + "Line": 4, + "Character": 0 + }, + "End": { + "Line": 4, + "Character": 21 + } + } + }, + { + "utterance": "my name is {name:userName}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "name", + "role": "userName" + } + ], + "errorMsgs": [], + "contextText": "- my name is {name:userName}", + "range": { + "Start": { + "Line": 5, + "Character": 0 + }, + "End": { + "Line": 5, + "Character": 28 + } + } + } + ], + "Entities": [], + "Name": "getUserName", + "IntentNameLine": "# getUserName", + "Range": { + "Start": { + "Line": 2, + "Character": 0 + }, + "End": { + "Line": 6, + "Character": 0 + } + } + }, + { + "Errors": [], + "SectionType": "simpleIntentSection", + "Id": "simpleIntentSection_getUserFirstName", + "Body": "> this is another role for the same 'name' entity\r\n- [[my] first name is] {name:userFirstName}\r\n", + "UtteranceAndEntitiesMap": [ + { + "utterance": "[[my] first name is] {name:userFirstName}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "name", + "role": "userFirstName" + } + ], + "errorMsgs": [], + "contextText": "- [[my] first name is] {name:userFirstName}", + "range": { + "Start": { + "Line": 9, + "Character": 0 + }, + "End": { + "Line": 9, + "Character": 43 + } + } + } + ], + "Entities": [], + "Name": "getUserFirstName", + "IntentNameLine": "# getUserFirstName", + "Range": { + "Start": { + "Line": 7, + "Character": 0 + }, + "End": { + "Line": 10, + "Character": 0 + } + } + }, + { + "Errors": [], + "SectionType": "simpleIntentSection", + "Id": "simpleIntentSection_BookFlight", + "Body": "> roles can be specified for list entity types as well - in this case fromCity and toCity are added as roles to the 'city' list entity defined further below\r\n- book flight from {city:fromCity} to {city:toCity}\r\n- [can you] get me a flight from {city:fromCity} to {city:toCity}\r\n- get me a flight to {city:toCity}\r\n- I need to fly from {city:fromCity}\r\n\r\n$city:Seattle=\r\n- Seattle\r\n- Tacoma\r\n- SeaTac\r\n- SEA\r\n\r\n$city:Portland=\r\n- Portland\r\n- PDX\r\n", + "UtteranceAndEntitiesMap": [ + { + "utterance": "book flight from {city:fromCity} to {city:toCity}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "city", + "role": "fromCity" + }, + { + "type": "patternAnyEntities", + "entity": "city", + "role": "toCity" + } + ], + "errorMsgs": [], + "contextText": "- book flight from {city:fromCity} to {city:toCity}", + "range": { + "Start": { + "Line": 13, + "Character": 0 + }, + "End": { + "Line": 13, + "Character": 51 + } + } + }, + { + "utterance": "[can you] get me a flight from {city:fromCity} to {city:toCity}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "city", + "role": "fromCity" + }, + { + "type": "patternAnyEntities", + "entity": "city", + "role": "toCity" + } + ], + "errorMsgs": [], + "contextText": "- [can you] get me a flight from {city:fromCity} to {city:toCity}", + "range": { + "Start": { + "Line": 14, + "Character": 0 + }, + "End": { + "Line": 14, + "Character": 65 + } + } + }, + { + "utterance": "get me a flight to {city:toCity}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "city", + "role": "toCity" + } + ], + "errorMsgs": [], + "contextText": "- get me a flight to {city:toCity}", + "range": { + "Start": { + "Line": 15, + "Character": 0 + }, + "End": { + "Line": 15, + "Character": 34 + } + } + }, + { + "utterance": "I need to fly from {city:fromCity}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "city", + "role": "fromCity" + } + ], + "errorMsgs": [], + "contextText": "- I need to fly from {city:fromCity}", + "range": { + "Start": { + "Line": 16, + "Character": 0 + }, + "End": { + "Line": 16, + "Character": 36 + } + } + } + ], + "Entities": [ + { + "Errors": [], + "SectionType": "entitySection", + "Id": "entitySection_city", + "Body": "", + "Name": "city", + "Type": "Seattle=", + "SynonymsOrPhraseList": [ "Seattle", "Tacoma", "SeaTac", "SEA" ], + "Range": { + "Start": { + "Line": 18, + "Character": 0 + }, + "End": { + "Line": 22, + "Character": 6 + } + } + }, + { + "Errors": [], + "SectionType": "entitySection", + "Id": "entitySection_city", + "Body": "", + "Name": "city", + "Type": "Portland=", + "SynonymsOrPhraseList": [ "Portland", "PDX" ], + "Range": { + "Start": { + "Line": 24, + "Character": 0 + }, + "End": { + "Line": 26, + "Character": 6 + } + } + } + ], + "Name": "BookFlight", + "IntentNameLine": "# BookFlight", + "Range": { + "Start": { + "Line": 11, + "Character": 0 + }, + "End": { + "Line": 27, + "Character": 0 + } + } + }, + { + "Errors": [], + "SectionType": "simpleIntentSection", + "Id": "simpleIntentSection_setAlarm", + "Body": "> prebuilt entitities can have roles as well.\r\n- create alarm for {datetimeV2:startTime}\r\n", + "UtteranceAndEntitiesMap": [ + { + "utterance": "create alarm for {datetimeV2:startTime}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "datetimeV2", + "role": "startTime" + } + ], + "errorMsgs": [], + "contextText": "- create alarm for {datetimeV2:startTime}", + "range": { + "Start": { + "Line": 30, + "Character": 0 + }, + "End": { + "Line": 30, + "Character": 41 + } + } + } + ], + "Entities": [], + "Name": "setAlarm", + "IntentNameLine": "# setAlarm", + "Range": { + "Start": { + "Line": 28, + "Character": 0 + }, + "End": { + "Line": 31, + "Character": 0 + } + } + }, + { + "Errors": [], + "SectionType": "simpleIntentSection", + "Id": "simpleIntentSection_deleteAlarm", + "Body": "- remove the {datetimeV2:deleteTime} alarm\r\n\r\n> This is just defining datetimeV2 as a prebuilt entity type. If an explicit type is not specified, by default entities in patterns will be set to pattern.any entity type\r\n$PREBUILT:datetimeV2\r\n", + "UtteranceAndEntitiesMap": [ + { + "utterance": "remove the {datetimeV2:deleteTime} alarm", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "datetimeV2", + "role": "deleteTime" + } + ], + "errorMsgs": [], + "contextText": "- remove the {datetimeV2:deleteTime} alarm", + "range": { + "Start": { + "Line": 33, + "Character": 0 + }, + "End": { + "Line": 33, + "Character": 42 + } + } + } + ], + "Entities": [ + { + "Errors": [], + "SectionType": "entitySection", + "Id": "entitySection_PREBUILT", + "Body": "", + "Name": "PREBUILT", + "Type": "datetimeV2", + "SynonymsOrPhraseList": [], + "Range": { + "Start": { + "Line": 36, + "Character": 0 + }, + "End": { + "Line": 36, + "Character": 20 + } + } + } + ], + "Name": "deleteAlarm", + "IntentNameLine": "# deleteAlarm", + "Range": { + "Start": { + "Line": 32, + "Character": 0 + }, + "End": { + "Line": 37, + "Character": 0 + } + } + }, + { + "Errors": [], + "SectionType": "simpleIntentSection", + "Id": "simpleIntentSection_randomTestIntent", + "Body": "- test {entity:foo}\r\n\r\n$entity: simple\r\n\r\n", + "UtteranceAndEntitiesMap": [ + { + "utterance": "test {entity:foo}", + "entities": [ + { + "type": "patternAnyEntities", + "entity": "entity", + "role": "foo" + } + ], + "errorMsgs": [], + "contextText": "- test {entity:foo}", + "range": { + "Start": { + "Line": 39, + "Character": 0 + }, + "End": { + "Line": 39, + "Character": 19 + } + } + } + ], + "Entities": [ + { + "Errors": [], + "SectionType": "entitySection", + "Id": "entitySection_entity", + "Body": "", + "Name": "entity", + "Type": "simple", + "SynonymsOrPhraseList": [], + "Range": { + "Start": { + "Line": 41, + "Character": 0 + }, + "End": { + "Line": 41, + "Character": 15 + } + } + } + ], + "Name": "randomTestIntent", + "IntentNameLine": "# randomTestIntent", + "Range": { + "Start": { + "Line": 38, + "Character": 0 + }, + "End": { + "Line": 43, + "Character": 0 + } + } + } + ], + "Content": "> You can use roles in patterns using the entityName:role notation.\n# getUserName\n- call me {name:userName}\n- I'm {name:userName}\n- my name is {name:userName}\n\n# getUserFirstName\n> this is another role for the same 'name' entity\n- [[my] first name is] {name:userFirstName}\n\n# BookFlight\n> roles can be specified for list entity types as well - in this case fromCity and toCity are added as roles to the 'city' list entity defined further below\n- book flight from {city:fromCity} to {city:toCity}\n- [can you] get me a flight from {city:fromCity} to {city:toCity}\n- get me a flight to {city:toCity}\n- I need to fly from {city:fromCity}\n\n$city:Seattle=\n- Seattle\n- Tacoma\n- SeaTac\n- SEA\n\n$city:Portland=\n- Portland\n- PDX\n\n# setAlarm\n> prebuilt entitities can have roles as well.\n- create alarm for {datetimeV2:startTime}\n\n# deleteAlarm\n- remove the {datetimeV2:deleteTime} alarm\n\n> This is just defining datetimeV2 as a prebuilt entity type. If an explicit type is not specified, by default entities in patterns will be set to pattern.any entity type\n$PREBUILT:datetimeV2\n\n# randomTestIntent\n- test {entity:foo}\n\n$entity: simple\n\n", + "Errors": [] +} \ No newline at end of file diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Microsoft.Bot.Builder.Parsers.LU.Tests.csproj b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Microsoft.Bot.Builder.Parsers.LU.Tests.csproj index b6e81e972b..c6bfe45d6e 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Microsoft.Bot.Builder.Parsers.LU.Tests.csproj +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Microsoft.Bot.Builder.Parsers.LU.Tests.csproj @@ -20,6 +20,12 @@ + + Always + + + Always + Always diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Parser/LuParserTests.cs b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Parser/LuParserTests.cs index 8ecbf00b96..ab77ce38e5 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Parser/LuParserTests.cs +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Parser/LuParserTests.cs @@ -18,6 +18,7 @@ public class LuParserTests [InlineData("LU_Sections")] [InlineData("SectionsLU")] [InlineData("ImportAllLu")] + [InlineData("AllComments")] public void ParseLuContent(string fileName) { // var luContent = "# Help"+ Environment.NewLine + "- help" + Environment.NewLine + "- I need help" + Environment.NewLine + "- please help"; From e5f7ff6dcd2634095d16f430ffb5335828c470dc Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Tue, 6 Feb 2024 09:40:01 -0600 Subject: [PATCH 23/26] Manually adding zh-CN and zh-TW to LanguagePolicy (#6745) * Manually adding zh-CN and zh-TW to LanguagePolicy * Only adding zh-cn to LanguagePolicy if missing. --------- Co-authored-by: Tracy Boehrer --- .../LanguagePolicy.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguagePolicy.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguagePolicy.cs index 2f10cad46e..ce3b10b1a0 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguagePolicy.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguagePolicy.cs @@ -74,6 +74,20 @@ private static IDictionary DefaultPolicy(string[] defaultLangu policy.Add(language, fallback.ToArray()); } + // Locales like zh-CN, zh-TW, etc... are deprecated locales returned by CultureInfo. + // However, many still supply the old value when setting up WebChat. Since we + // really just need the progression to check for LG/LU files, we are manually adding + // them so that these files are found. This is OS version specific. + if (!policy.ContainsKey("zh-cn")) + { + policy.Add("zh-cn", new string[] { "zh-cn", "zh" }); + } + + if (!policy.ContainsKey("zh-tw")) + { + policy.Add("zh-tw", new string[] { "zh-tw", "zh" }); + } + return policy; } } From 23c03d8606c24a3d660aef17f46bdb2a0e0ca7d2 Mon Sep 17 00:00:00 2001 From: Joel Mut <62260472+sw-joelmut@users.noreply.github.com> Date: Fri, 9 Feb 2024 10:58:04 -0300 Subject: [PATCH 24/26] Fix ANTLR when LU content contains only comments (#6747) --- .../Generated/LUFileLexer.cs | 321 ++-- .../Generated/LUFileLexer.interp | 2 +- .../Generated/LUFileParser.cs | 1309 +++++++++-------- .../Generated/LUFileParser.interp | 2 +- .../LUFileLexer.g4 | 2 +- .../LUFileParser.g4 | 5 +- .../Fixtures/LU_Sections_Unix.json | 4 +- .../Fixtures/LU_Sections_Windows.json | Bin 100892 -> 100884 bytes .../Fixtures/testLU131.json | 2 +- .../Fixtures/testLU139.json | 2 +- .../Fixtures/testLU153.json | 2 +- 11 files changed, 835 insertions(+), 816 deletions(-) diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs index 545c561319..aef59d733b 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.cs @@ -122,7 +122,7 @@ static LUFileLexer() { } } private static int[] _serializedATN = { - 4,0,40,737,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7, + 4,0,40,739,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7, 3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11, 2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18, 2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -145,42 +145,42 @@ static LUFileLexer() { 32,275,1,33,5,33,279,8,33,10,33,12,33,282,9,33,1,33,1,33,5,33,286,8,33, 10,33,12,33,289,9,33,1,33,1,33,1,33,1,33,4,33,295,8,33,11,33,12,33,296, 1,34,5,34,300,8,34,10,34,12,34,303,9,34,1,34,1,34,5,34,307,8,34,10,34, - 12,34,310,9,34,1,35,4,35,313,8,35,11,35,12,35,314,1,35,5,35,318,8,35,10, - 35,12,35,321,9,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1, - 37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,5,40,344,8,40,10, - 40,12,40,347,9,40,1,40,1,40,5,40,351,8,40,10,40,12,40,354,9,40,1,40,1, - 40,5,40,358,8,40,10,40,12,40,361,9,40,1,40,1,40,5,40,365,8,40,10,40,12, - 40,368,9,40,1,40,1,40,1,40,5,40,373,8,40,10,40,12,40,376,9,40,1,40,3,40, - 379,8,40,1,41,5,41,382,8,41,10,41,12,41,385,9,41,1,41,1,41,5,41,389,8, - 41,10,41,12,41,392,9,41,1,41,1,41,5,41,396,8,41,10,41,12,41,399,9,41,1, - 41,1,41,5,41,403,8,41,10,41,12,41,406,9,41,1,41,5,41,409,8,41,10,41,12, - 41,412,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,43,1,43,1,43,1,43,5,43,432,8,43,10,43,12,43,435,9,43,1,43, - 1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,5,44,447,8,44,10,44,12,44, - 450,9,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1, - 45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,47,1,47,1,47,1,47,1,48,3,48,477, - 8,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51,1,51,1,51, - 1,51,1,51,1,51,1,51,3,51,496,8,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1, - 52,1,52,1,52,1,52,1,52,3,52,510,8,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53, + 12,34,310,9,34,1,34,1,34,1,35,4,35,315,8,35,11,35,12,35,316,1,35,5,35, + 320,8,35,10,35,12,35,323,9,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36, + 1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,5,40, + 346,8,40,10,40,12,40,349,9,40,1,40,1,40,5,40,353,8,40,10,40,12,40,356, + 9,40,1,40,1,40,5,40,360,8,40,10,40,12,40,363,9,40,1,40,1,40,5,40,367,8, + 40,10,40,12,40,370,9,40,1,40,1,40,1,40,5,40,375,8,40,10,40,12,40,378,9, + 40,1,40,3,40,381,8,40,1,41,5,41,384,8,41,10,41,12,41,387,9,41,1,41,1,41, + 5,41,391,8,41,10,41,12,41,394,9,41,1,41,1,41,5,41,398,8,41,10,41,12,41, + 401,9,41,1,41,1,41,5,41,405,8,41,10,41,12,41,408,9,41,1,41,5,41,411,8, + 41,10,41,12,41,414,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,5,43,434,8,43,10,43,12,43,437, + 9,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,5,44,449,8,44,10, + 44,12,44,452,9,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,47,1,47,1,47,1,47,1, + 48,3,48,479,8,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51, + 1,51,1,51,1,51,1,51,1,51,1,51,3,51,498,8,51,1,52,1,52,1,52,1,52,1,52,1, + 52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,512,8,52,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, - 1,53,1,53,1,53,1,53,1,53,1,53,3,53,581,8,53,1,54,1,54,5,54,585,8,54,10, - 54,12,54,588,9,54,1,54,1,54,1,55,1,55,5,55,594,8,55,10,55,12,55,597,9, - 55,1,55,1,55,1,56,1,56,5,56,603,8,56,10,56,12,56,606,9,56,1,57,4,57,609, - 8,57,11,57,12,57,610,1,58,1,58,4,58,615,8,58,11,58,12,58,616,1,58,1,58, - 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,3,61,630,8,61,1,61,1,61,1, - 61,1,61,1,61,1,62,1,62,1,62,3,62,640,8,62,1,62,1,62,1,62,5,62,645,8,62, - 10,62,12,62,648,9,62,1,63,1,63,1,64,1,64,1,64,1,64,1,65,3,65,657,8,65, - 1,65,1,65,1,65,1,65,1,65,1,66,1,66,3,66,666,8,66,1,67,1,67,1,67,1,67,5, - 67,672,8,67,10,67,12,67,675,9,67,1,67,5,67,678,8,67,10,67,12,67,681,9, - 67,1,67,1,67,1,68,4,68,686,8,68,11,68,12,68,687,1,69,1,69,1,69,1,69,1, - 70,3,70,695,8,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,5,71,704,8,71,10,71, - 12,71,707,9,71,1,71,1,71,1,72,1,72,5,72,713,8,72,10,72,12,72,716,9,72, - 1,73,4,73,719,8,73,11,73,12,73,720,1,74,1,74,1,75,3,75,726,8,75,1,75,1, - 75,1,75,1,75,1,75,1,76,4,76,734,8,76,11,76,12,76,735,7,352,366,374,390, - 433,448,687,0,77,6,0,8,0,10,0,12,0,14,0,16,0,18,0,20,0,22,0,24,0,26,0, + 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,583,8,53,1,54,1,54,5,54,587, + 8,54,10,54,12,54,590,9,54,1,54,1,54,1,55,1,55,5,55,596,8,55,10,55,12,55, + 599,9,55,1,55,1,55,1,56,1,56,5,56,605,8,56,10,56,12,56,608,9,56,1,57,4, + 57,611,8,57,11,57,12,57,612,1,58,1,58,4,58,617,8,58,11,58,12,58,618,1, + 58,1,58,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,3,61,632,8,61,1,61, + 1,61,1,61,1,61,1,61,1,62,1,62,1,62,3,62,642,8,62,1,62,1,62,1,62,5,62,647, + 8,62,10,62,12,62,650,9,62,1,63,1,63,1,64,1,64,1,64,1,64,1,65,3,65,659, + 8,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,3,66,668,8,66,1,67,1,67,1,67,1, + 67,5,67,674,8,67,10,67,12,67,677,9,67,1,67,5,67,680,8,67,10,67,12,67,683, + 9,67,1,67,1,67,1,68,4,68,688,8,68,11,68,12,68,689,1,69,1,69,1,69,1,69, + 1,70,3,70,697,8,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,5,71,706,8,71,10, + 71,12,71,709,9,71,1,71,1,71,1,72,1,72,5,72,715,8,72,10,72,12,72,718,9, + 72,1,73,4,73,721,8,73,11,73,12,73,722,1,74,1,74,1,75,3,75,728,8,75,1,75, + 1,75,1,75,1,75,1,75,1,76,4,76,736,8,76,11,76,12,76,737,7,354,368,376,392, + 435,450,689,0,77,6,0,8,0,10,0,12,0,14,0,16,0,18,0,20,0,22,0,24,0,26,0, 28,0,30,0,32,0,34,0,36,0,38,0,40,0,42,0,44,0,46,0,48,0,50,0,52,0,54,0, 56,0,58,0,60,0,62,0,64,0,66,1,68,2,70,3,72,4,74,5,76,6,78,7,80,8,82,9, 84,10,86,11,88,12,90,13,92,14,94,15,96,16,98,17,100,0,102,0,104,18,106, @@ -198,7 +198,7 @@ static LUFileLexer() { 13,40,41,7,0,10,10,13,13,40,41,91,91,93,93,123,123,125,125,7,0,9,10,13, 13,32,32,34,34,39,39,44,44,59,59,2,0,34,34,39,39,6,0,9,10,13,13,34,34, 39,39,44,44,59,59,2,0,45,45,95,95,4,0,10,10,13,13,123,123,125,125,4,0, - 9,10,13,13,32,32,92,92,4,0,9,10,13,13,32,32,58,58,761,0,66,1,0,0,0,0,68, + 9,10,13,13,32,32,92,92,4,0,9,10,13,13,32,32,58,58,763,0,66,1,0,0,0,0,68, 1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0, 0,0,80,1,0,0,0,0,82,1,0,0,0,0,84,1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0,90, 1,0,0,0,0,92,1,0,0,0,0,94,1,0,0,0,0,96,1,0,0,0,0,98,1,0,0,0,1,100,1,0, @@ -215,16 +215,16 @@ static LUFileLexer() { 0,0,0,46,200,1,0,0,0,48,202,1,0,0,0,50,204,1,0,0,0,52,206,1,0,0,0,54,208, 1,0,0,0,56,210,1,0,0,0,58,212,1,0,0,0,60,214,1,0,0,0,62,216,1,0,0,0,64, 218,1,0,0,0,66,221,1,0,0,0,68,226,1,0,0,0,70,235,1,0,0,0,72,280,1,0,0, - 0,74,301,1,0,0,0,76,312,1,0,0,0,78,326,1,0,0,0,80,330,1,0,0,0,82,334,1, - 0,0,0,84,338,1,0,0,0,86,345,1,0,0,0,88,383,1,0,0,0,90,413,1,0,0,0,92,427, - 1,0,0,0,94,441,1,0,0,0,96,455,1,0,0,0,98,469,1,0,0,0,100,471,1,0,0,0,102, - 476,1,0,0,0,104,483,1,0,0,0,106,485,1,0,0,0,108,487,1,0,0,0,110,497,1, - 0,0,0,112,580,1,0,0,0,114,582,1,0,0,0,116,591,1,0,0,0,118,600,1,0,0,0, - 120,608,1,0,0,0,122,612,1,0,0,0,124,620,1,0,0,0,126,624,1,0,0,0,128,629, - 1,0,0,0,130,639,1,0,0,0,132,649,1,0,0,0,134,651,1,0,0,0,136,656,1,0,0, - 0,138,663,1,0,0,0,140,667,1,0,0,0,142,685,1,0,0,0,144,689,1,0,0,0,146, - 694,1,0,0,0,148,701,1,0,0,0,150,710,1,0,0,0,152,718,1,0,0,0,154,722,1, - 0,0,0,156,725,1,0,0,0,158,733,1,0,0,0,160,161,7,0,0,0,161,7,1,0,0,0,162, + 0,74,301,1,0,0,0,76,314,1,0,0,0,78,328,1,0,0,0,80,332,1,0,0,0,82,336,1, + 0,0,0,84,340,1,0,0,0,86,347,1,0,0,0,88,385,1,0,0,0,90,415,1,0,0,0,92,429, + 1,0,0,0,94,443,1,0,0,0,96,457,1,0,0,0,98,471,1,0,0,0,100,473,1,0,0,0,102, + 478,1,0,0,0,104,485,1,0,0,0,106,487,1,0,0,0,108,489,1,0,0,0,110,499,1, + 0,0,0,112,582,1,0,0,0,114,584,1,0,0,0,116,593,1,0,0,0,118,602,1,0,0,0, + 120,610,1,0,0,0,122,614,1,0,0,0,124,622,1,0,0,0,126,626,1,0,0,0,128,631, + 1,0,0,0,130,641,1,0,0,0,132,651,1,0,0,0,134,653,1,0,0,0,136,658,1,0,0, + 0,138,665,1,0,0,0,140,669,1,0,0,0,142,687,1,0,0,0,144,691,1,0,0,0,146, + 696,1,0,0,0,148,703,1,0,0,0,150,712,1,0,0,0,152,720,1,0,0,0,154,724,1, + 0,0,0,156,727,1,0,0,0,158,735,1,0,0,0,160,161,7,0,0,0,161,7,1,0,0,0,162, 163,7,1,0,0,163,9,1,0,0,0,164,165,7,2,0,0,165,11,1,0,0,0,166,167,7,3,0, 0,167,13,1,0,0,0,168,169,7,4,0,0,169,15,1,0,0,0,170,171,7,5,0,0,171,17, 1,0,0,0,172,173,7,6,0,0,173,19,1,0,0,0,174,175,7,7,0,0,175,21,1,0,0,0, @@ -261,122 +261,123 @@ static LUFileLexer() { 0,297,73,1,0,0,0,298,300,3,66,30,0,299,298,1,0,0,0,300,303,1,0,0,0,301, 299,1,0,0,0,301,302,1,0,0,0,302,304,1,0,0,0,303,301,1,0,0,0,304,308,5, 62,0,0,305,307,8,29,0,0,306,305,1,0,0,0,307,310,1,0,0,0,308,306,1,0,0, - 0,308,309,1,0,0,0,309,75,1,0,0,0,310,308,1,0,0,0,311,313,5,35,0,0,312, - 311,1,0,0,0,313,314,1,0,0,0,314,312,1,0,0,0,314,315,1,0,0,0,315,319,1, - 0,0,0,316,318,3,66,30,0,317,316,1,0,0,0,318,321,1,0,0,0,319,317,1,0,0, - 0,319,320,1,0,0,0,320,322,1,0,0,0,321,319,1,0,0,0,322,323,5,63,0,0,323, - 324,1,0,0,0,324,325,6,35,1,0,325,77,1,0,0,0,326,327,5,35,0,0,327,328,1, - 0,0,0,328,329,6,36,2,0,329,79,1,0,0,0,330,331,3,64,29,0,331,332,1,0,0, - 0,332,333,6,37,3,0,333,81,1,0,0,0,334,335,5,36,0,0,335,336,1,0,0,0,336, - 337,6,38,4,0,337,83,1,0,0,0,338,339,5,64,0,0,339,340,1,0,0,0,340,341,6, - 39,5,0,341,85,1,0,0,0,342,344,3,66,30,0,343,342,1,0,0,0,344,347,1,0,0, - 0,345,343,1,0,0,0,345,346,1,0,0,0,346,348,1,0,0,0,347,345,1,0,0,0,348, - 352,5,91,0,0,349,351,8,30,0,0,350,349,1,0,0,0,351,354,1,0,0,0,352,353, - 1,0,0,0,352,350,1,0,0,0,353,355,1,0,0,0,354,352,1,0,0,0,355,359,5,93,0, - 0,356,358,3,66,30,0,357,356,1,0,0,0,358,361,1,0,0,0,359,357,1,0,0,0,359, - 360,1,0,0,0,360,378,1,0,0,0,361,359,1,0,0,0,362,366,5,40,0,0,363,365,8, - 31,0,0,364,363,1,0,0,0,365,368,1,0,0,0,366,367,1,0,0,0,366,364,1,0,0,0, - 367,369,1,0,0,0,368,366,1,0,0,0,369,379,5,41,0,0,370,374,5,91,0,0,371, - 373,8,30,0,0,372,371,1,0,0,0,373,376,1,0,0,0,374,375,1,0,0,0,374,372,1, - 0,0,0,375,377,1,0,0,0,376,374,1,0,0,0,377,379,5,93,0,0,378,362,1,0,0,0, - 378,370,1,0,0,0,379,87,1,0,0,0,380,382,3,66,30,0,381,380,1,0,0,0,382,385, - 1,0,0,0,383,381,1,0,0,0,383,384,1,0,0,0,384,386,1,0,0,0,385,383,1,0,0, - 0,386,390,5,91,0,0,387,389,8,30,0,0,388,387,1,0,0,0,389,392,1,0,0,0,390, - 391,1,0,0,0,390,388,1,0,0,0,391,393,1,0,0,0,392,390,1,0,0,0,393,397,5, - 93,0,0,394,396,3,66,30,0,395,394,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0, - 0,397,398,1,0,0,0,398,400,1,0,0,0,399,397,1,0,0,0,400,404,5,58,0,0,401, - 403,3,66,30,0,402,401,1,0,0,0,403,406,1,0,0,0,404,402,1,0,0,0,404,405, - 1,0,0,0,405,410,1,0,0,0,406,404,1,0,0,0,407,409,8,29,0,0,408,407,1,0,0, - 0,409,412,1,0,0,0,410,408,1,0,0,0,410,411,1,0,0,0,411,89,1,0,0,0,412,410, - 1,0,0,0,413,414,5,42,0,0,414,415,5,42,0,0,415,416,1,0,0,0,416,417,3,16, - 5,0,417,418,3,22,8,0,418,419,3,28,11,0,419,420,3,44,19,0,420,421,3,14, - 4,0,421,422,3,40,17,0,422,423,3,42,18,0,423,424,5,58,0,0,424,425,5,42, - 0,0,425,426,5,42,0,0,426,91,1,0,0,0,427,428,5,60,0,0,428,429,5,97,0,0, - 429,433,1,0,0,0,430,432,9,0,0,0,431,430,1,0,0,0,432,435,1,0,0,0,433,434, - 1,0,0,0,433,431,1,0,0,0,434,436,1,0,0,0,435,433,1,0,0,0,436,437,5,60,0, - 0,437,438,5,47,0,0,438,439,5,97,0,0,439,440,5,62,0,0,440,93,1,0,0,0,441, - 442,5,96,0,0,442,443,5,96,0,0,443,444,5,96,0,0,444,448,1,0,0,0,445,447, - 9,0,0,0,446,445,1,0,0,0,447,450,1,0,0,0,448,449,1,0,0,0,448,446,1,0,0, - 0,449,451,1,0,0,0,450,448,1,0,0,0,451,452,5,96,0,0,452,453,5,96,0,0,453, - 454,5,96,0,0,454,95,1,0,0,0,455,456,5,42,0,0,456,457,5,42,0,0,457,458, - 1,0,0,0,458,459,3,36,15,0,459,460,3,40,17,0,460,461,3,34,14,0,461,462, - 3,30,12,0,462,463,3,36,15,0,463,464,3,44,19,0,464,465,3,42,18,0,465,466, - 5,58,0,0,466,467,5,42,0,0,467,468,5,42,0,0,468,97,1,0,0,0,469,470,9,0, - 0,0,470,99,1,0,0,0,471,472,3,66,30,0,472,473,1,0,0,0,473,474,6,47,6,0, - 474,101,1,0,0,0,475,477,5,13,0,0,476,475,1,0,0,0,476,477,1,0,0,0,477,478, - 1,0,0,0,478,479,5,10,0,0,479,480,1,0,0,0,480,481,6,48,7,0,481,482,6,48, - 8,0,482,103,1,0,0,0,483,484,5,61,0,0,484,105,1,0,0,0,485,486,5,44,0,0, - 486,107,1,0,0,0,487,488,3,20,7,0,488,489,3,6,0,0,489,490,3,42,18,0,490, - 491,3,40,17,0,491,492,3,34,14,0,492,493,3,28,11,0,493,495,3,14,4,0,494, - 496,3,42,18,0,495,494,1,0,0,0,495,496,1,0,0,0,496,109,1,0,0,0,497,498, - 3,46,20,0,498,499,3,42,18,0,499,500,3,14,4,0,500,501,3,42,18,0,501,502, - 3,16,5,0,502,503,3,14,4,0,503,504,3,6,0,0,504,505,3,44,19,0,505,506,3, - 46,20,0,506,507,3,40,17,0,507,509,3,14,4,0,508,510,3,42,18,0,509,508,1, - 0,0,0,509,510,1,0,0,0,510,111,1,0,0,0,511,512,3,42,18,0,512,513,3,22,8, - 0,513,514,3,30,12,0,514,515,3,36,15,0,515,516,3,28,11,0,516,517,3,14,4, - 0,517,581,1,0,0,0,518,519,3,28,11,0,519,520,3,22,8,0,520,521,3,42,18,0, - 521,522,3,44,19,0,522,581,1,0,0,0,523,524,3,40,17,0,524,525,3,14,4,0,525, - 526,3,18,6,0,526,527,3,14,4,0,527,528,3,52,23,0,528,581,1,0,0,0,529,530, - 3,36,15,0,530,531,3,40,17,0,531,532,3,14,4,0,532,533,3,8,1,0,533,534,3, - 46,20,0,534,535,3,22,8,0,535,536,3,28,11,0,536,537,3,44,19,0,537,581,1, - 0,0,0,538,539,3,10,2,0,539,540,3,34,14,0,540,541,3,30,12,0,541,542,3,36, - 15,0,542,543,3,34,14,0,543,544,3,42,18,0,544,545,3,22,8,0,545,546,3,44, - 19,0,546,547,3,14,4,0,547,581,1,0,0,0,548,549,3,30,12,0,549,550,3,28,11, - 0,550,581,1,0,0,0,551,552,3,36,15,0,552,553,3,6,0,0,553,554,3,44,19,0, - 554,555,3,44,19,0,555,556,3,14,4,0,556,557,3,40,17,0,557,558,3,32,13,0, - 558,559,3,6,0,0,559,560,3,32,13,0,560,561,3,54,24,0,561,581,1,0,0,0,562, - 563,3,36,15,0,563,564,3,20,7,0,564,565,3,40,17,0,565,566,3,6,0,0,566,567, - 3,42,18,0,567,568,3,14,4,0,568,569,3,28,11,0,569,570,3,22,8,0,570,571, - 3,42,18,0,571,572,3,44,19,0,572,581,1,0,0,0,573,574,3,22,8,0,574,575,3, - 32,13,0,575,576,3,44,19,0,576,577,3,14,4,0,577,578,3,32,13,0,578,579,3, - 44,19,0,579,581,1,0,0,0,580,511,1,0,0,0,580,518,1,0,0,0,580,523,1,0,0, - 0,580,529,1,0,0,0,580,538,1,0,0,0,580,548,1,0,0,0,580,551,1,0,0,0,580, - 562,1,0,0,0,580,573,1,0,0,0,581,113,1,0,0,0,582,586,5,40,0,0,583,585,8, - 29,0,0,584,583,1,0,0,0,585,588,1,0,0,0,586,584,1,0,0,0,586,587,1,0,0,0, - 587,589,1,0,0,0,588,586,1,0,0,0,589,590,5,41,0,0,590,115,1,0,0,0,591,595, - 5,91,0,0,592,594,8,32,0,0,593,592,1,0,0,0,594,597,1,0,0,0,595,593,1,0, - 0,0,595,596,1,0,0,0,596,598,1,0,0,0,597,595,1,0,0,0,598,599,5,93,0,0,599, - 117,1,0,0,0,600,604,5,47,0,0,601,603,8,29,0,0,602,601,1,0,0,0,603,606, - 1,0,0,0,604,602,1,0,0,0,604,605,1,0,0,0,605,119,1,0,0,0,606,604,1,0,0, - 0,607,609,8,33,0,0,608,607,1,0,0,0,609,610,1,0,0,0,610,608,1,0,0,0,610, - 611,1,0,0,0,611,121,1,0,0,0,612,614,7,34,0,0,613,615,8,35,0,0,614,613, - 1,0,0,0,615,616,1,0,0,0,616,614,1,0,0,0,616,617,1,0,0,0,617,618,1,0,0, - 0,618,619,7,34,0,0,619,123,1,0,0,0,620,621,3,66,30,0,621,622,1,0,0,0,622, - 623,6,59,6,0,623,125,1,0,0,0,624,625,5,35,0,0,625,626,1,0,0,0,626,627, - 6,60,9,0,627,127,1,0,0,0,628,630,5,13,0,0,629,628,1,0,0,0,629,630,1,0, - 0,0,630,631,1,0,0,0,631,632,5,10,0,0,632,633,1,0,0,0,633,634,6,61,0,0, - 634,635,6,61,8,0,635,129,1,0,0,0,636,640,3,58,26,0,637,640,3,60,27,0,638, - 640,5,95,0,0,639,636,1,0,0,0,639,637,1,0,0,0,639,638,1,0,0,0,640,646,1, - 0,0,0,641,645,3,58,26,0,642,645,3,60,27,0,643,645,7,36,0,0,644,641,1,0, - 0,0,644,642,1,0,0,0,644,643,1,0,0,0,645,648,1,0,0,0,646,644,1,0,0,0,646, - 647,1,0,0,0,647,131,1,0,0,0,648,646,1,0,0,0,649,650,5,46,0,0,650,133,1, - 0,0,0,651,652,3,66,30,0,652,653,1,0,0,0,653,654,6,64,6,0,654,135,1,0,0, - 0,655,657,5,13,0,0,656,655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0,0,658, - 659,5,10,0,0,659,660,1,0,0,0,660,661,6,65,7,0,661,662,6,65,8,0,662,137, - 1,0,0,0,663,665,5,92,0,0,664,666,8,29,0,0,665,664,1,0,0,0,665,666,1,0, - 0,0,666,139,1,0,0,0,667,679,5,123,0,0,668,678,8,37,0,0,669,673,5,123,0, - 0,670,672,8,29,0,0,671,670,1,0,0,0,672,675,1,0,0,0,673,671,1,0,0,0,673, - 674,1,0,0,0,674,676,1,0,0,0,675,673,1,0,0,0,676,678,5,125,0,0,677,668, - 1,0,0,0,677,669,1,0,0,0,678,681,1,0,0,0,679,677,1,0,0,0,679,680,1,0,0, - 0,680,682,1,0,0,0,681,679,1,0,0,0,682,683,5,125,0,0,683,141,1,0,0,0,684, - 686,8,38,0,0,685,684,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0,687,685,1, - 0,0,0,688,143,1,0,0,0,689,690,3,66,30,0,690,691,1,0,0,0,691,692,6,69,6, - 0,692,145,1,0,0,0,693,695,5,13,0,0,694,693,1,0,0,0,694,695,1,0,0,0,695, - 696,1,0,0,0,696,697,5,10,0,0,697,698,1,0,0,0,698,699,6,70,0,0,699,700, - 6,70,8,0,700,147,1,0,0,0,701,705,5,91,0,0,702,704,8,32,0,0,703,702,1,0, - 0,0,704,707,1,0,0,0,705,703,1,0,0,0,705,706,1,0,0,0,706,708,1,0,0,0,707, - 705,1,0,0,0,708,709,5,93,0,0,709,149,1,0,0,0,710,714,5,47,0,0,711,713, - 8,29,0,0,712,711,1,0,0,0,713,716,1,0,0,0,714,712,1,0,0,0,714,715,1,0,0, - 0,715,151,1,0,0,0,716,714,1,0,0,0,717,719,8,39,0,0,718,717,1,0,0,0,719, - 720,1,0,0,0,720,718,1,0,0,0,720,721,1,0,0,0,721,153,1,0,0,0,722,723,5, - 58,0,0,723,155,1,0,0,0,724,726,5,13,0,0,725,724,1,0,0,0,725,726,1,0,0, - 0,726,727,1,0,0,0,727,728,5,10,0,0,728,729,1,0,0,0,729,730,6,75,0,0,730, - 731,6,75,8,0,731,157,1,0,0,0,732,734,8,29,0,0,733,732,1,0,0,0,734,735, - 1,0,0,0,735,733,1,0,0,0,735,736,1,0,0,0,736,159,1,0,0,0,57,0,1,2,3,4,5, - 223,226,235,242,268,275,280,287,296,301,308,314,319,345,352,359,366,374, - 378,383,390,397,404,410,433,448,476,495,509,580,586,595,604,610,616,629, - 639,644,646,656,665,673,677,679,687,694,705,714,720,725,735,10,6,0,0,5, - 5,0,5,2,0,5,3,0,5,4,0,5,1,0,7,1,0,7,2,0,4,0,0,7,7,0 + 0,308,309,1,0,0,0,309,311,1,0,0,0,310,308,1,0,0,0,311,312,6,34,0,0,312, + 75,1,0,0,0,313,315,5,35,0,0,314,313,1,0,0,0,315,316,1,0,0,0,316,314,1, + 0,0,0,316,317,1,0,0,0,317,321,1,0,0,0,318,320,3,66,30,0,319,318,1,0,0, + 0,320,323,1,0,0,0,321,319,1,0,0,0,321,322,1,0,0,0,322,324,1,0,0,0,323, + 321,1,0,0,0,324,325,5,63,0,0,325,326,1,0,0,0,326,327,6,35,1,0,327,77,1, + 0,0,0,328,329,5,35,0,0,329,330,1,0,0,0,330,331,6,36,2,0,331,79,1,0,0,0, + 332,333,3,64,29,0,333,334,1,0,0,0,334,335,6,37,3,0,335,81,1,0,0,0,336, + 337,5,36,0,0,337,338,1,0,0,0,338,339,6,38,4,0,339,83,1,0,0,0,340,341,5, + 64,0,0,341,342,1,0,0,0,342,343,6,39,5,0,343,85,1,0,0,0,344,346,3,66,30, + 0,345,344,1,0,0,0,346,349,1,0,0,0,347,345,1,0,0,0,347,348,1,0,0,0,348, + 350,1,0,0,0,349,347,1,0,0,0,350,354,5,91,0,0,351,353,8,30,0,0,352,351, + 1,0,0,0,353,356,1,0,0,0,354,355,1,0,0,0,354,352,1,0,0,0,355,357,1,0,0, + 0,356,354,1,0,0,0,357,361,5,93,0,0,358,360,3,66,30,0,359,358,1,0,0,0,360, + 363,1,0,0,0,361,359,1,0,0,0,361,362,1,0,0,0,362,380,1,0,0,0,363,361,1, + 0,0,0,364,368,5,40,0,0,365,367,8,31,0,0,366,365,1,0,0,0,367,370,1,0,0, + 0,368,369,1,0,0,0,368,366,1,0,0,0,369,371,1,0,0,0,370,368,1,0,0,0,371, + 381,5,41,0,0,372,376,5,91,0,0,373,375,8,30,0,0,374,373,1,0,0,0,375,378, + 1,0,0,0,376,377,1,0,0,0,376,374,1,0,0,0,377,379,1,0,0,0,378,376,1,0,0, + 0,379,381,5,93,0,0,380,364,1,0,0,0,380,372,1,0,0,0,381,87,1,0,0,0,382, + 384,3,66,30,0,383,382,1,0,0,0,384,387,1,0,0,0,385,383,1,0,0,0,385,386, + 1,0,0,0,386,388,1,0,0,0,387,385,1,0,0,0,388,392,5,91,0,0,389,391,8,30, + 0,0,390,389,1,0,0,0,391,394,1,0,0,0,392,393,1,0,0,0,392,390,1,0,0,0,393, + 395,1,0,0,0,394,392,1,0,0,0,395,399,5,93,0,0,396,398,3,66,30,0,397,396, + 1,0,0,0,398,401,1,0,0,0,399,397,1,0,0,0,399,400,1,0,0,0,400,402,1,0,0, + 0,401,399,1,0,0,0,402,406,5,58,0,0,403,405,3,66,30,0,404,403,1,0,0,0,405, + 408,1,0,0,0,406,404,1,0,0,0,406,407,1,0,0,0,407,412,1,0,0,0,408,406,1, + 0,0,0,409,411,8,29,0,0,410,409,1,0,0,0,411,414,1,0,0,0,412,410,1,0,0,0, + 412,413,1,0,0,0,413,89,1,0,0,0,414,412,1,0,0,0,415,416,5,42,0,0,416,417, + 5,42,0,0,417,418,1,0,0,0,418,419,3,16,5,0,419,420,3,22,8,0,420,421,3,28, + 11,0,421,422,3,44,19,0,422,423,3,14,4,0,423,424,3,40,17,0,424,425,3,42, + 18,0,425,426,5,58,0,0,426,427,5,42,0,0,427,428,5,42,0,0,428,91,1,0,0,0, + 429,430,5,60,0,0,430,431,5,97,0,0,431,435,1,0,0,0,432,434,9,0,0,0,433, + 432,1,0,0,0,434,437,1,0,0,0,435,436,1,0,0,0,435,433,1,0,0,0,436,438,1, + 0,0,0,437,435,1,0,0,0,438,439,5,60,0,0,439,440,5,47,0,0,440,441,5,97,0, + 0,441,442,5,62,0,0,442,93,1,0,0,0,443,444,5,96,0,0,444,445,5,96,0,0,445, + 446,5,96,0,0,446,450,1,0,0,0,447,449,9,0,0,0,448,447,1,0,0,0,449,452,1, + 0,0,0,450,451,1,0,0,0,450,448,1,0,0,0,451,453,1,0,0,0,452,450,1,0,0,0, + 453,454,5,96,0,0,454,455,5,96,0,0,455,456,5,96,0,0,456,95,1,0,0,0,457, + 458,5,42,0,0,458,459,5,42,0,0,459,460,1,0,0,0,460,461,3,36,15,0,461,462, + 3,40,17,0,462,463,3,34,14,0,463,464,3,30,12,0,464,465,3,36,15,0,465,466, + 3,44,19,0,466,467,3,42,18,0,467,468,5,58,0,0,468,469,5,42,0,0,469,470, + 5,42,0,0,470,97,1,0,0,0,471,472,9,0,0,0,472,99,1,0,0,0,473,474,3,66,30, + 0,474,475,1,0,0,0,475,476,6,47,6,0,476,101,1,0,0,0,477,479,5,13,0,0,478, + 477,1,0,0,0,478,479,1,0,0,0,479,480,1,0,0,0,480,481,5,10,0,0,481,482,1, + 0,0,0,482,483,6,48,7,0,483,484,6,48,8,0,484,103,1,0,0,0,485,486,5,61,0, + 0,486,105,1,0,0,0,487,488,5,44,0,0,488,107,1,0,0,0,489,490,3,20,7,0,490, + 491,3,6,0,0,491,492,3,42,18,0,492,493,3,40,17,0,493,494,3,34,14,0,494, + 495,3,28,11,0,495,497,3,14,4,0,496,498,3,42,18,0,497,496,1,0,0,0,497,498, + 1,0,0,0,498,109,1,0,0,0,499,500,3,46,20,0,500,501,3,42,18,0,501,502,3, + 14,4,0,502,503,3,42,18,0,503,504,3,16,5,0,504,505,3,14,4,0,505,506,3,6, + 0,0,506,507,3,44,19,0,507,508,3,46,20,0,508,509,3,40,17,0,509,511,3,14, + 4,0,510,512,3,42,18,0,511,510,1,0,0,0,511,512,1,0,0,0,512,111,1,0,0,0, + 513,514,3,42,18,0,514,515,3,22,8,0,515,516,3,30,12,0,516,517,3,36,15,0, + 517,518,3,28,11,0,518,519,3,14,4,0,519,583,1,0,0,0,520,521,3,28,11,0,521, + 522,3,22,8,0,522,523,3,42,18,0,523,524,3,44,19,0,524,583,1,0,0,0,525,526, + 3,40,17,0,526,527,3,14,4,0,527,528,3,18,6,0,528,529,3,14,4,0,529,530,3, + 52,23,0,530,583,1,0,0,0,531,532,3,36,15,0,532,533,3,40,17,0,533,534,3, + 14,4,0,534,535,3,8,1,0,535,536,3,46,20,0,536,537,3,22,8,0,537,538,3,28, + 11,0,538,539,3,44,19,0,539,583,1,0,0,0,540,541,3,10,2,0,541,542,3,34,14, + 0,542,543,3,30,12,0,543,544,3,36,15,0,544,545,3,34,14,0,545,546,3,42,18, + 0,546,547,3,22,8,0,547,548,3,44,19,0,548,549,3,14,4,0,549,583,1,0,0,0, + 550,551,3,30,12,0,551,552,3,28,11,0,552,583,1,0,0,0,553,554,3,36,15,0, + 554,555,3,6,0,0,555,556,3,44,19,0,556,557,3,44,19,0,557,558,3,14,4,0,558, + 559,3,40,17,0,559,560,3,32,13,0,560,561,3,6,0,0,561,562,3,32,13,0,562, + 563,3,54,24,0,563,583,1,0,0,0,564,565,3,36,15,0,565,566,3,20,7,0,566,567, + 3,40,17,0,567,568,3,6,0,0,568,569,3,42,18,0,569,570,3,14,4,0,570,571,3, + 28,11,0,571,572,3,22,8,0,572,573,3,42,18,0,573,574,3,44,19,0,574,583,1, + 0,0,0,575,576,3,22,8,0,576,577,3,32,13,0,577,578,3,44,19,0,578,579,3,14, + 4,0,579,580,3,32,13,0,580,581,3,44,19,0,581,583,1,0,0,0,582,513,1,0,0, + 0,582,520,1,0,0,0,582,525,1,0,0,0,582,531,1,0,0,0,582,540,1,0,0,0,582, + 550,1,0,0,0,582,553,1,0,0,0,582,564,1,0,0,0,582,575,1,0,0,0,583,113,1, + 0,0,0,584,588,5,40,0,0,585,587,8,29,0,0,586,585,1,0,0,0,587,590,1,0,0, + 0,588,586,1,0,0,0,588,589,1,0,0,0,589,591,1,0,0,0,590,588,1,0,0,0,591, + 592,5,41,0,0,592,115,1,0,0,0,593,597,5,91,0,0,594,596,8,32,0,0,595,594, + 1,0,0,0,596,599,1,0,0,0,597,595,1,0,0,0,597,598,1,0,0,0,598,600,1,0,0, + 0,599,597,1,0,0,0,600,601,5,93,0,0,601,117,1,0,0,0,602,606,5,47,0,0,603, + 605,8,29,0,0,604,603,1,0,0,0,605,608,1,0,0,0,606,604,1,0,0,0,606,607,1, + 0,0,0,607,119,1,0,0,0,608,606,1,0,0,0,609,611,8,33,0,0,610,609,1,0,0,0, + 611,612,1,0,0,0,612,610,1,0,0,0,612,613,1,0,0,0,613,121,1,0,0,0,614,616, + 7,34,0,0,615,617,8,35,0,0,616,615,1,0,0,0,617,618,1,0,0,0,618,616,1,0, + 0,0,618,619,1,0,0,0,619,620,1,0,0,0,620,621,7,34,0,0,621,123,1,0,0,0,622, + 623,3,66,30,0,623,624,1,0,0,0,624,625,6,59,6,0,625,125,1,0,0,0,626,627, + 5,35,0,0,627,628,1,0,0,0,628,629,6,60,9,0,629,127,1,0,0,0,630,632,5,13, + 0,0,631,630,1,0,0,0,631,632,1,0,0,0,632,633,1,0,0,0,633,634,5,10,0,0,634, + 635,1,0,0,0,635,636,6,61,0,0,636,637,6,61,8,0,637,129,1,0,0,0,638,642, + 3,58,26,0,639,642,3,60,27,0,640,642,5,95,0,0,641,638,1,0,0,0,641,639,1, + 0,0,0,641,640,1,0,0,0,642,648,1,0,0,0,643,647,3,58,26,0,644,647,3,60,27, + 0,645,647,7,36,0,0,646,643,1,0,0,0,646,644,1,0,0,0,646,645,1,0,0,0,647, + 650,1,0,0,0,648,646,1,0,0,0,648,649,1,0,0,0,649,131,1,0,0,0,650,648,1, + 0,0,0,651,652,5,46,0,0,652,133,1,0,0,0,653,654,3,66,30,0,654,655,1,0,0, + 0,655,656,6,64,6,0,656,135,1,0,0,0,657,659,5,13,0,0,658,657,1,0,0,0,658, + 659,1,0,0,0,659,660,1,0,0,0,660,661,5,10,0,0,661,662,1,0,0,0,662,663,6, + 65,7,0,663,664,6,65,8,0,664,137,1,0,0,0,665,667,5,92,0,0,666,668,8,29, + 0,0,667,666,1,0,0,0,667,668,1,0,0,0,668,139,1,0,0,0,669,681,5,123,0,0, + 670,680,8,37,0,0,671,675,5,123,0,0,672,674,8,29,0,0,673,672,1,0,0,0,674, + 677,1,0,0,0,675,673,1,0,0,0,675,676,1,0,0,0,676,678,1,0,0,0,677,675,1, + 0,0,0,678,680,5,125,0,0,679,670,1,0,0,0,679,671,1,0,0,0,680,683,1,0,0, + 0,681,679,1,0,0,0,681,682,1,0,0,0,682,684,1,0,0,0,683,681,1,0,0,0,684, + 685,5,125,0,0,685,141,1,0,0,0,686,688,8,38,0,0,687,686,1,0,0,0,688,689, + 1,0,0,0,689,690,1,0,0,0,689,687,1,0,0,0,690,143,1,0,0,0,691,692,3,66,30, + 0,692,693,1,0,0,0,693,694,6,69,6,0,694,145,1,0,0,0,695,697,5,13,0,0,696, + 695,1,0,0,0,696,697,1,0,0,0,697,698,1,0,0,0,698,699,5,10,0,0,699,700,1, + 0,0,0,700,701,6,70,0,0,701,702,6,70,8,0,702,147,1,0,0,0,703,707,5,91,0, + 0,704,706,8,32,0,0,705,704,1,0,0,0,706,709,1,0,0,0,707,705,1,0,0,0,707, + 708,1,0,0,0,708,710,1,0,0,0,709,707,1,0,0,0,710,711,5,93,0,0,711,149,1, + 0,0,0,712,716,5,47,0,0,713,715,8,29,0,0,714,713,1,0,0,0,715,718,1,0,0, + 0,716,714,1,0,0,0,716,717,1,0,0,0,717,151,1,0,0,0,718,716,1,0,0,0,719, + 721,8,39,0,0,720,719,1,0,0,0,721,722,1,0,0,0,722,720,1,0,0,0,722,723,1, + 0,0,0,723,153,1,0,0,0,724,725,5,58,0,0,725,155,1,0,0,0,726,728,5,13,0, + 0,727,726,1,0,0,0,727,728,1,0,0,0,728,729,1,0,0,0,729,730,5,10,0,0,730, + 731,1,0,0,0,731,732,6,75,0,0,732,733,6,75,8,0,733,157,1,0,0,0,734,736, + 8,29,0,0,735,734,1,0,0,0,736,737,1,0,0,0,737,735,1,0,0,0,737,738,1,0,0, + 0,738,159,1,0,0,0,57,0,1,2,3,4,5,223,226,235,242,268,275,280,287,296,301, + 308,316,321,347,354,361,368,376,380,385,392,399,406,412,435,450,478,497, + 511,582,588,597,606,612,618,631,641,646,648,658,667,675,679,681,689,696, + 707,716,722,727,737,10,6,0,0,5,5,0,5,2,0,5,3,0,5,4,0,5,1,0,7,1,0,7,2,0, + 4,0,0,7,7,0 }; public static readonly ATN _ATN = diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp index 69f0f095f6..d87ad2bbe8 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileLexer.interp @@ -176,4 +176,4 @@ ENTITY_MODE QNA_MODE atn: -[4, 0, 40, 737, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 4, 30, 222, 8, 30, 11, 30, 12, 30, 223, 1, 31, 3, 31, 227, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 5, 32, 234, 8, 32, 10, 32, 12, 32, 237, 9, 32, 1, 32, 1, 32, 5, 32, 241, 8, 32, 10, 32, 12, 32, 244, 9, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 267, 8, 32, 10, 32, 12, 32, 270, 9, 32, 1, 32, 1, 32, 4, 32, 274, 8, 32, 11, 32, 12, 32, 275, 1, 33, 5, 33, 279, 8, 33, 10, 33, 12, 33, 282, 9, 33, 1, 33, 1, 33, 5, 33, 286, 8, 33, 10, 33, 12, 33, 289, 9, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 295, 8, 33, 11, 33, 12, 33, 296, 1, 34, 5, 34, 300, 8, 34, 10, 34, 12, 34, 303, 9, 34, 1, 34, 1, 34, 5, 34, 307, 8, 34, 10, 34, 12, 34, 310, 9, 34, 1, 35, 4, 35, 313, 8, 35, 11, 35, 12, 35, 314, 1, 35, 5, 35, 318, 8, 35, 10, 35, 12, 35, 321, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 5, 40, 344, 8, 40, 10, 40, 12, 40, 347, 9, 40, 1, 40, 1, 40, 5, 40, 351, 8, 40, 10, 40, 12, 40, 354, 9, 40, 1, 40, 1, 40, 5, 40, 358, 8, 40, 10, 40, 12, 40, 361, 9, 40, 1, 40, 1, 40, 5, 40, 365, 8, 40, 10, 40, 12, 40, 368, 9, 40, 1, 40, 1, 40, 1, 40, 5, 40, 373, 8, 40, 10, 40, 12, 40, 376, 9, 40, 1, 40, 3, 40, 379, 8, 40, 1, 41, 5, 41, 382, 8, 41, 10, 41, 12, 41, 385, 9, 41, 1, 41, 1, 41, 5, 41, 389, 8, 41, 10, 41, 12, 41, 392, 9, 41, 1, 41, 1, 41, 5, 41, 396, 8, 41, 10, 41, 12, 41, 399, 9, 41, 1, 41, 1, 41, 5, 41, 403, 8, 41, 10, 41, 12, 41, 406, 9, 41, 1, 41, 5, 41, 409, 8, 41, 10, 41, 12, 41, 412, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 432, 8, 43, 10, 43, 12, 43, 435, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 447, 8, 44, 10, 44, 12, 44, 450, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 3, 48, 477, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 496, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 510, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 581, 8, 53, 1, 54, 1, 54, 5, 54, 585, 8, 54, 10, 54, 12, 54, 588, 9, 54, 1, 54, 1, 54, 1, 55, 1, 55, 5, 55, 594, 8, 55, 10, 55, 12, 55, 597, 9, 55, 1, 55, 1, 55, 1, 56, 1, 56, 5, 56, 603, 8, 56, 10, 56, 12, 56, 606, 9, 56, 1, 57, 4, 57, 609, 8, 57, 11, 57, 12, 57, 610, 1, 58, 1, 58, 4, 58, 615, 8, 58, 11, 58, 12, 58, 616, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 3, 61, 630, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 3, 62, 640, 8, 62, 1, 62, 1, 62, 1, 62, 5, 62, 645, 8, 62, 10, 62, 12, 62, 648, 9, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 3, 65, 657, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 666, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 672, 8, 67, 10, 67, 12, 67, 675, 9, 67, 1, 67, 5, 67, 678, 8, 67, 10, 67, 12, 67, 681, 9, 67, 1, 67, 1, 67, 1, 68, 4, 68, 686, 8, 68, 11, 68, 12, 68, 687, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 3, 70, 695, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 5, 71, 704, 8, 71, 10, 71, 12, 71, 707, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 5, 72, 713, 8, 72, 10, 72, 12, 72, 716, 9, 72, 1, 73, 4, 73, 719, 8, 73, 11, 73, 12, 73, 720, 1, 74, 1, 74, 1, 75, 3, 75, 726, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 4, 76, 734, 8, 76, 11, 76, 12, 76, 735, 7, 352, 366, 374, 390, 433, 448, 687, 0, 77, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20, 0, 22, 0, 24, 0, 26, 0, 28, 0, 30, 0, 32, 0, 34, 0, 36, 0, 38, 0, 40, 0, 42, 0, 44, 0, 46, 0, 48, 0, 50, 0, 52, 0, 54, 0, 56, 0, 58, 0, 60, 0, 62, 0, 64, 0, 66, 1, 68, 2, 70, 3, 72, 4, 74, 5, 76, 6, 78, 7, 80, 8, 82, 9, 84, 10, 86, 11, 88, 12, 90, 13, 92, 14, 94, 15, 96, 16, 98, 17, 100, 0, 102, 0, 104, 18, 106, 19, 108, 20, 110, 21, 112, 22, 114, 23, 116, 24, 118, 25, 120, 26, 122, 27, 124, 0, 126, 0, 128, 28, 130, 29, 132, 30, 134, 0, 136, 0, 138, 31, 140, 32, 142, 33, 144, 0, 146, 34, 148, 35, 150, 36, 152, 37, 154, 38, 156, 39, 158, 40, 6, 0, 1, 2, 3, 4, 5, 40, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 4, 0, 9, 9, 32, 32, 160, 160, 65279, 65279, 2, 0, 42, 43, 45, 45, 2, 0, 10, 10, 13, 13, 4, 0, 10, 10, 13, 13, 91, 91, 93, 93, 3, 0, 10, 10, 13, 13, 40, 41, 7, 0, 10, 10, 13, 13, 40, 41, 91, 91, 93, 93, 123, 123, 125, 125, 7, 0, 9, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 34, 34, 39, 39, 6, 0, 9, 10, 13, 13, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 45, 45, 95, 95, 4, 0, 10, 10, 13, 13, 123, 123, 125, 125, 4, 0, 9, 10, 13, 13, 32, 32, 92, 92, 4, 0, 9, 10, 13, 13, 32, 32, 58, 58, 761, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 1, 100, 1, 0, 0, 0, 1, 102, 1, 0, 0, 0, 1, 104, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 1, 108, 1, 0, 0, 0, 1, 110, 1, 0, 0, 0, 1, 112, 1, 0, 0, 0, 1, 114, 1, 0, 0, 0, 1, 116, 1, 0, 0, 0, 1, 118, 1, 0, 0, 0, 1, 120, 1, 0, 0, 0, 1, 122, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 2, 126, 1, 0, 0, 0, 2, 128, 1, 0, 0, 0, 2, 130, 1, 0, 0, 0, 2, 132, 1, 0, 0, 0, 3, 134, 1, 0, 0, 0, 3, 136, 1, 0, 0, 0, 3, 138, 1, 0, 0, 0, 3, 140, 1, 0, 0, 0, 3, 142, 1, 0, 0, 0, 4, 144, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 4, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 5, 156, 1, 0, 0, 0, 5, 158, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 164, 1, 0, 0, 0, 12, 166, 1, 0, 0, 0, 14, 168, 1, 0, 0, 0, 16, 170, 1, 0, 0, 0, 18, 172, 1, 0, 0, 0, 20, 174, 1, 0, 0, 0, 22, 176, 1, 0, 0, 0, 24, 178, 1, 0, 0, 0, 26, 180, 1, 0, 0, 0, 28, 182, 1, 0, 0, 0, 30, 184, 1, 0, 0, 0, 32, 186, 1, 0, 0, 0, 34, 188, 1, 0, 0, 0, 36, 190, 1, 0, 0, 0, 38, 192, 1, 0, 0, 0, 40, 194, 1, 0, 0, 0, 42, 196, 1, 0, 0, 0, 44, 198, 1, 0, 0, 0, 46, 200, 1, 0, 0, 0, 48, 202, 1, 0, 0, 0, 50, 204, 1, 0, 0, 0, 52, 206, 1, 0, 0, 0, 54, 208, 1, 0, 0, 0, 56, 210, 1, 0, 0, 0, 58, 212, 1, 0, 0, 0, 60, 214, 1, 0, 0, 0, 62, 216, 1, 0, 0, 0, 64, 218, 1, 0, 0, 0, 66, 221, 1, 0, 0, 0, 68, 226, 1, 0, 0, 0, 70, 235, 1, 0, 0, 0, 72, 280, 1, 0, 0, 0, 74, 301, 1, 0, 0, 0, 76, 312, 1, 0, 0, 0, 78, 326, 1, 0, 0, 0, 80, 330, 1, 0, 0, 0, 82, 334, 1, 0, 0, 0, 84, 338, 1, 0, 0, 0, 86, 345, 1, 0, 0, 0, 88, 383, 1, 0, 0, 0, 90, 413, 1, 0, 0, 0, 92, 427, 1, 0, 0, 0, 94, 441, 1, 0, 0, 0, 96, 455, 1, 0, 0, 0, 98, 469, 1, 0, 0, 0, 100, 471, 1, 0, 0, 0, 102, 476, 1, 0, 0, 0, 104, 483, 1, 0, 0, 0, 106, 485, 1, 0, 0, 0, 108, 487, 1, 0, 0, 0, 110, 497, 1, 0, 0, 0, 112, 580, 1, 0, 0, 0, 114, 582, 1, 0, 0, 0, 116, 591, 1, 0, 0, 0, 118, 600, 1, 0, 0, 0, 120, 608, 1, 0, 0, 0, 122, 612, 1, 0, 0, 0, 124, 620, 1, 0, 0, 0, 126, 624, 1, 0, 0, 0, 128, 629, 1, 0, 0, 0, 130, 639, 1, 0, 0, 0, 132, 649, 1, 0, 0, 0, 134, 651, 1, 0, 0, 0, 136, 656, 1, 0, 0, 0, 138, 663, 1, 0, 0, 0, 140, 667, 1, 0, 0, 0, 142, 685, 1, 0, 0, 0, 144, 689, 1, 0, 0, 0, 146, 694, 1, 0, 0, 0, 148, 701, 1, 0, 0, 0, 150, 710, 1, 0, 0, 0, 152, 718, 1, 0, 0, 0, 154, 722, 1, 0, 0, 0, 156, 725, 1, 0, 0, 0, 158, 733, 1, 0, 0, 0, 160, 161, 7, 0, 0, 0, 161, 7, 1, 0, 0, 0, 162, 163, 7, 1, 0, 0, 163, 9, 1, 0, 0, 0, 164, 165, 7, 2, 0, 0, 165, 11, 1, 0, 0, 0, 166, 167, 7, 3, 0, 0, 167, 13, 1, 0, 0, 0, 168, 169, 7, 4, 0, 0, 169, 15, 1, 0, 0, 0, 170, 171, 7, 5, 0, 0, 171, 17, 1, 0, 0, 0, 172, 173, 7, 6, 0, 0, 173, 19, 1, 0, 0, 0, 174, 175, 7, 7, 0, 0, 175, 21, 1, 0, 0, 0, 176, 177, 7, 8, 0, 0, 177, 23, 1, 0, 0, 0, 178, 179, 7, 9, 0, 0, 179, 25, 1, 0, 0, 0, 180, 181, 7, 10, 0, 0, 181, 27, 1, 0, 0, 0, 182, 183, 7, 11, 0, 0, 183, 29, 1, 0, 0, 0, 184, 185, 7, 12, 0, 0, 185, 31, 1, 0, 0, 0, 186, 187, 7, 13, 0, 0, 187, 33, 1, 0, 0, 0, 188, 189, 7, 14, 0, 0, 189, 35, 1, 0, 0, 0, 190, 191, 7, 15, 0, 0, 191, 37, 1, 0, 0, 0, 192, 193, 7, 16, 0, 0, 193, 39, 1, 0, 0, 0, 194, 195, 7, 17, 0, 0, 195, 41, 1, 0, 0, 0, 196, 197, 7, 18, 0, 0, 197, 43, 1, 0, 0, 0, 198, 199, 7, 19, 0, 0, 199, 45, 1, 0, 0, 0, 200, 201, 7, 20, 0, 0, 201, 47, 1, 0, 0, 0, 202, 203, 7, 21, 0, 0, 203, 49, 1, 0, 0, 0, 204, 205, 7, 22, 0, 0, 205, 51, 1, 0, 0, 0, 206, 207, 7, 23, 0, 0, 207, 53, 1, 0, 0, 0, 208, 209, 7, 24, 0, 0, 209, 55, 1, 0, 0, 0, 210, 211, 7, 25, 0, 0, 211, 57, 1, 0, 0, 0, 212, 213, 7, 26, 0, 0, 213, 59, 1, 0, 0, 0, 214, 215, 2, 48, 57, 0, 215, 61, 1, 0, 0, 0, 216, 217, 7, 27, 0, 0, 217, 63, 1, 0, 0, 0, 218, 219, 7, 28, 0, 0, 219, 65, 1, 0, 0, 0, 220, 222, 3, 62, 28, 0, 221, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 67, 1, 0, 0, 0, 225, 227, 5, 13, 0, 0, 226, 225, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 229, 5, 10, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 31, 0, 0, 231, 69, 1, 0, 0, 0, 232, 234, 3, 66, 30, 0, 233, 232, 1, 0, 0, 0, 234, 237, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 238, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 238, 242, 5, 62, 0, 0, 239, 241, 3, 66, 30, 0, 240, 239, 1, 0, 0, 0, 241, 244, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 245, 246, 5, 33, 0, 0, 246, 247, 5, 35, 0, 0, 247, 248, 5, 32, 0, 0, 248, 249, 5, 64, 0, 0, 249, 250, 5, 113, 0, 0, 250, 251, 5, 110, 0, 0, 251, 252, 5, 97, 0, 0, 252, 253, 5, 46, 0, 0, 253, 254, 5, 112, 0, 0, 254, 255, 5, 97, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 114, 0, 0, 257, 258, 5, 46, 0, 0, 258, 259, 5, 115, 0, 0, 259, 260, 5, 111, 0, 0, 260, 261, 5, 117, 0, 0, 261, 262, 5, 114, 0, 0, 262, 263, 5, 99, 0, 0, 263, 264, 5, 101, 0, 0, 264, 268, 1, 0, 0, 0, 265, 267, 3, 66, 30, 0, 266, 265, 1, 0, 0, 0, 267, 270, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 271, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 271, 273, 5, 61, 0, 0, 272, 274, 8, 29, 0, 0, 273, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 71, 1, 0, 0, 0, 277, 279, 3, 66, 30, 0, 278, 277, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 283, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 283, 287, 5, 62, 0, 0, 284, 286, 3, 66, 30, 0, 285, 284, 1, 0, 0, 0, 286, 289, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 290, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 290, 291, 5, 33, 0, 0, 291, 292, 5, 35, 0, 0, 292, 294, 1, 0, 0, 0, 293, 295, 8, 29, 0, 0, 294, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 73, 1, 0, 0, 0, 298, 300, 3, 66, 30, 0, 299, 298, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 304, 308, 5, 62, 0, 0, 305, 307, 8, 29, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 75, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 313, 5, 35, 0, 0, 312, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 319, 1, 0, 0, 0, 316, 318, 3, 66, 30, 0, 317, 316, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 322, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 323, 5, 63, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 6, 35, 1, 0, 325, 77, 1, 0, 0, 0, 326, 327, 5, 35, 0, 0, 327, 328, 1, 0, 0, 0, 328, 329, 6, 36, 2, 0, 329, 79, 1, 0, 0, 0, 330, 331, 3, 64, 29, 0, 331, 332, 1, 0, 0, 0, 332, 333, 6, 37, 3, 0, 333, 81, 1, 0, 0, 0, 334, 335, 5, 36, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 6, 38, 4, 0, 337, 83, 1, 0, 0, 0, 338, 339, 5, 64, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 6, 39, 5, 0, 341, 85, 1, 0, 0, 0, 342, 344, 3, 66, 30, 0, 343, 342, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 352, 5, 91, 0, 0, 349, 351, 8, 30, 0, 0, 350, 349, 1, 0, 0, 0, 351, 354, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 355, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 359, 5, 93, 0, 0, 356, 358, 3, 66, 30, 0, 357, 356, 1, 0, 0, 0, 358, 361, 1, 0, 0, 0, 359, 357, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 378, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 362, 366, 5, 40, 0, 0, 363, 365, 8, 31, 0, 0, 364, 363, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 379, 5, 41, 0, 0, 370, 374, 5, 91, 0, 0, 371, 373, 8, 30, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 379, 5, 93, 0, 0, 378, 362, 1, 0, 0, 0, 378, 370, 1, 0, 0, 0, 379, 87, 1, 0, 0, 0, 380, 382, 3, 66, 30, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 386, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 390, 5, 91, 0, 0, 387, 389, 8, 30, 0, 0, 388, 387, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, 393, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 397, 5, 93, 0, 0, 394, 396, 3, 66, 30, 0, 395, 394, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 400, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 400, 404, 5, 58, 0, 0, 401, 403, 3, 66, 30, 0, 402, 401, 1, 0, 0, 0, 403, 406, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 410, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 407, 409, 8, 29, 0, 0, 408, 407, 1, 0, 0, 0, 409, 412, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 89, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 413, 414, 5, 42, 0, 0, 414, 415, 5, 42, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 3, 16, 5, 0, 417, 418, 3, 22, 8, 0, 418, 419, 3, 28, 11, 0, 419, 420, 3, 44, 19, 0, 420, 421, 3, 14, 4, 0, 421, 422, 3, 40, 17, 0, 422, 423, 3, 42, 18, 0, 423, 424, 5, 58, 0, 0, 424, 425, 5, 42, 0, 0, 425, 426, 5, 42, 0, 0, 426, 91, 1, 0, 0, 0, 427, 428, 5, 60, 0, 0, 428, 429, 5, 97, 0, 0, 429, 433, 1, 0, 0, 0, 430, 432, 9, 0, 0, 0, 431, 430, 1, 0, 0, 0, 432, 435, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 436, 437, 5, 60, 0, 0, 437, 438, 5, 47, 0, 0, 438, 439, 5, 97, 0, 0, 439, 440, 5, 62, 0, 0, 440, 93, 1, 0, 0, 0, 441, 442, 5, 96, 0, 0, 442, 443, 5, 96, 0, 0, 443, 444, 5, 96, 0, 0, 444, 448, 1, 0, 0, 0, 445, 447, 9, 0, 0, 0, 446, 445, 1, 0, 0, 0, 447, 450, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 449, 451, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 451, 452, 5, 96, 0, 0, 452, 453, 5, 96, 0, 0, 453, 454, 5, 96, 0, 0, 454, 95, 1, 0, 0, 0, 455, 456, 5, 42, 0, 0, 456, 457, 5, 42, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 3, 36, 15, 0, 459, 460, 3, 40, 17, 0, 460, 461, 3, 34, 14, 0, 461, 462, 3, 30, 12, 0, 462, 463, 3, 36, 15, 0, 463, 464, 3, 44, 19, 0, 464, 465, 3, 42, 18, 0, 465, 466, 5, 58, 0, 0, 466, 467, 5, 42, 0, 0, 467, 468, 5, 42, 0, 0, 468, 97, 1, 0, 0, 0, 469, 470, 9, 0, 0, 0, 470, 99, 1, 0, 0, 0, 471, 472, 3, 66, 30, 0, 472, 473, 1, 0, 0, 0, 473, 474, 6, 47, 6, 0, 474, 101, 1, 0, 0, 0, 475, 477, 5, 13, 0, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 5, 10, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 6, 48, 7, 0, 481, 482, 6, 48, 8, 0, 482, 103, 1, 0, 0, 0, 483, 484, 5, 61, 0, 0, 484, 105, 1, 0, 0, 0, 485, 486, 5, 44, 0, 0, 486, 107, 1, 0, 0, 0, 487, 488, 3, 20, 7, 0, 488, 489, 3, 6, 0, 0, 489, 490, 3, 42, 18, 0, 490, 491, 3, 40, 17, 0, 491, 492, 3, 34, 14, 0, 492, 493, 3, 28, 11, 0, 493, 495, 3, 14, 4, 0, 494, 496, 3, 42, 18, 0, 495, 494, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 109, 1, 0, 0, 0, 497, 498, 3, 46, 20, 0, 498, 499, 3, 42, 18, 0, 499, 500, 3, 14, 4, 0, 500, 501, 3, 42, 18, 0, 501, 502, 3, 16, 5, 0, 502, 503, 3, 14, 4, 0, 503, 504, 3, 6, 0, 0, 504, 505, 3, 44, 19, 0, 505, 506, 3, 46, 20, 0, 506, 507, 3, 40, 17, 0, 507, 509, 3, 14, 4, 0, 508, 510, 3, 42, 18, 0, 509, 508, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 111, 1, 0, 0, 0, 511, 512, 3, 42, 18, 0, 512, 513, 3, 22, 8, 0, 513, 514, 3, 30, 12, 0, 514, 515, 3, 36, 15, 0, 515, 516, 3, 28, 11, 0, 516, 517, 3, 14, 4, 0, 517, 581, 1, 0, 0, 0, 518, 519, 3, 28, 11, 0, 519, 520, 3, 22, 8, 0, 520, 521, 3, 42, 18, 0, 521, 522, 3, 44, 19, 0, 522, 581, 1, 0, 0, 0, 523, 524, 3, 40, 17, 0, 524, 525, 3, 14, 4, 0, 525, 526, 3, 18, 6, 0, 526, 527, 3, 14, 4, 0, 527, 528, 3, 52, 23, 0, 528, 581, 1, 0, 0, 0, 529, 530, 3, 36, 15, 0, 530, 531, 3, 40, 17, 0, 531, 532, 3, 14, 4, 0, 532, 533, 3, 8, 1, 0, 533, 534, 3, 46, 20, 0, 534, 535, 3, 22, 8, 0, 535, 536, 3, 28, 11, 0, 536, 537, 3, 44, 19, 0, 537, 581, 1, 0, 0, 0, 538, 539, 3, 10, 2, 0, 539, 540, 3, 34, 14, 0, 540, 541, 3, 30, 12, 0, 541, 542, 3, 36, 15, 0, 542, 543, 3, 34, 14, 0, 543, 544, 3, 42, 18, 0, 544, 545, 3, 22, 8, 0, 545, 546, 3, 44, 19, 0, 546, 547, 3, 14, 4, 0, 547, 581, 1, 0, 0, 0, 548, 549, 3, 30, 12, 0, 549, 550, 3, 28, 11, 0, 550, 581, 1, 0, 0, 0, 551, 552, 3, 36, 15, 0, 552, 553, 3, 6, 0, 0, 553, 554, 3, 44, 19, 0, 554, 555, 3, 44, 19, 0, 555, 556, 3, 14, 4, 0, 556, 557, 3, 40, 17, 0, 557, 558, 3, 32, 13, 0, 558, 559, 3, 6, 0, 0, 559, 560, 3, 32, 13, 0, 560, 561, 3, 54, 24, 0, 561, 581, 1, 0, 0, 0, 562, 563, 3, 36, 15, 0, 563, 564, 3, 20, 7, 0, 564, 565, 3, 40, 17, 0, 565, 566, 3, 6, 0, 0, 566, 567, 3, 42, 18, 0, 567, 568, 3, 14, 4, 0, 568, 569, 3, 28, 11, 0, 569, 570, 3, 22, 8, 0, 570, 571, 3, 42, 18, 0, 571, 572, 3, 44, 19, 0, 572, 581, 1, 0, 0, 0, 573, 574, 3, 22, 8, 0, 574, 575, 3, 32, 13, 0, 575, 576, 3, 44, 19, 0, 576, 577, 3, 14, 4, 0, 577, 578, 3, 32, 13, 0, 578, 579, 3, 44, 19, 0, 579, 581, 1, 0, 0, 0, 580, 511, 1, 0, 0, 0, 580, 518, 1, 0, 0, 0, 580, 523, 1, 0, 0, 0, 580, 529, 1, 0, 0, 0, 580, 538, 1, 0, 0, 0, 580, 548, 1, 0, 0, 0, 580, 551, 1, 0, 0, 0, 580, 562, 1, 0, 0, 0, 580, 573, 1, 0, 0, 0, 581, 113, 1, 0, 0, 0, 582, 586, 5, 40, 0, 0, 583, 585, 8, 29, 0, 0, 584, 583, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 589, 590, 5, 41, 0, 0, 590, 115, 1, 0, 0, 0, 591, 595, 5, 91, 0, 0, 592, 594, 8, 32, 0, 0, 593, 592, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 5, 93, 0, 0, 599, 117, 1, 0, 0, 0, 600, 604, 5, 47, 0, 0, 601, 603, 8, 29, 0, 0, 602, 601, 1, 0, 0, 0, 603, 606, 1, 0, 0, 0, 604, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 119, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 607, 609, 8, 33, 0, 0, 608, 607, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 608, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 121, 1, 0, 0, 0, 612, 614, 7, 34, 0, 0, 613, 615, 8, 35, 0, 0, 614, 613, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 7, 34, 0, 0, 619, 123, 1, 0, 0, 0, 620, 621, 3, 66, 30, 0, 621, 622, 1, 0, 0, 0, 622, 623, 6, 59, 6, 0, 623, 125, 1, 0, 0, 0, 624, 625, 5, 35, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 6, 60, 9, 0, 627, 127, 1, 0, 0, 0, 628, 630, 5, 13, 0, 0, 629, 628, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 5, 10, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 6, 61, 0, 0, 634, 635, 6, 61, 8, 0, 635, 129, 1, 0, 0, 0, 636, 640, 3, 58, 26, 0, 637, 640, 3, 60, 27, 0, 638, 640, 5, 95, 0, 0, 639, 636, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 639, 638, 1, 0, 0, 0, 640, 646, 1, 0, 0, 0, 641, 645, 3, 58, 26, 0, 642, 645, 3, 60, 27, 0, 643, 645, 7, 36, 0, 0, 644, 641, 1, 0, 0, 0, 644, 642, 1, 0, 0, 0, 644, 643, 1, 0, 0, 0, 645, 648, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 131, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 649, 650, 5, 46, 0, 0, 650, 133, 1, 0, 0, 0, 651, 652, 3, 66, 30, 0, 652, 653, 1, 0, 0, 0, 653, 654, 6, 64, 6, 0, 654, 135, 1, 0, 0, 0, 655, 657, 5, 13, 0, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 10, 0, 0, 659, 660, 1, 0, 0, 0, 660, 661, 6, 65, 7, 0, 661, 662, 6, 65, 8, 0, 662, 137, 1, 0, 0, 0, 663, 665, 5, 92, 0, 0, 664, 666, 8, 29, 0, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 139, 1, 0, 0, 0, 667, 679, 5, 123, 0, 0, 668, 678, 8, 37, 0, 0, 669, 673, 5, 123, 0, 0, 670, 672, 8, 29, 0, 0, 671, 670, 1, 0, 0, 0, 672, 675, 1, 0, 0, 0, 673, 671, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 676, 678, 5, 125, 0, 0, 677, 668, 1, 0, 0, 0, 677, 669, 1, 0, 0, 0, 678, 681, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 682, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 682, 683, 5, 125, 0, 0, 683, 141, 1, 0, 0, 0, 684, 686, 8, 38, 0, 0, 685, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 688, 143, 1, 0, 0, 0, 689, 690, 3, 66, 30, 0, 690, 691, 1, 0, 0, 0, 691, 692, 6, 69, 6, 0, 692, 145, 1, 0, 0, 0, 693, 695, 5, 13, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 5, 10, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 6, 70, 0, 0, 699, 700, 6, 70, 8, 0, 700, 147, 1, 0, 0, 0, 701, 705, 5, 91, 0, 0, 702, 704, 8, 32, 0, 0, 703, 702, 1, 0, 0, 0, 704, 707, 1, 0, 0, 0, 705, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 708, 1, 0, 0, 0, 707, 705, 1, 0, 0, 0, 708, 709, 5, 93, 0, 0, 709, 149, 1, 0, 0, 0, 710, 714, 5, 47, 0, 0, 711, 713, 8, 29, 0, 0, 712, 711, 1, 0, 0, 0, 713, 716, 1, 0, 0, 0, 714, 712, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 151, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 717, 719, 8, 39, 0, 0, 718, 717, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 153, 1, 0, 0, 0, 722, 723, 5, 58, 0, 0, 723, 155, 1, 0, 0, 0, 724, 726, 5, 13, 0, 0, 725, 724, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 5, 10, 0, 0, 728, 729, 1, 0, 0, 0, 729, 730, 6, 75, 0, 0, 730, 731, 6, 75, 8, 0, 731, 157, 1, 0, 0, 0, 732, 734, 8, 29, 0, 0, 733, 732, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 159, 1, 0, 0, 0, 57, 0, 1, 2, 3, 4, 5, 223, 226, 235, 242, 268, 275, 280, 287, 296, 301, 308, 314, 319, 345, 352, 359, 366, 374, 378, 383, 390, 397, 404, 410, 433, 448, 476, 495, 509, 580, 586, 595, 604, 610, 616, 629, 639, 644, 646, 656, 665, 673, 677, 679, 687, 694, 705, 714, 720, 725, 735, 10, 6, 0, 0, 5, 5, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 1, 0, 7, 1, 0, 7, 2, 0, 4, 0, 0, 7, 7, 0] \ No newline at end of file +[4, 0, 40, 739, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 4, 30, 222, 8, 30, 11, 30, 12, 30, 223, 1, 31, 3, 31, 227, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 5, 32, 234, 8, 32, 10, 32, 12, 32, 237, 9, 32, 1, 32, 1, 32, 5, 32, 241, 8, 32, 10, 32, 12, 32, 244, 9, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 267, 8, 32, 10, 32, 12, 32, 270, 9, 32, 1, 32, 1, 32, 4, 32, 274, 8, 32, 11, 32, 12, 32, 275, 1, 33, 5, 33, 279, 8, 33, 10, 33, 12, 33, 282, 9, 33, 1, 33, 1, 33, 5, 33, 286, 8, 33, 10, 33, 12, 33, 289, 9, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 295, 8, 33, 11, 33, 12, 33, 296, 1, 34, 5, 34, 300, 8, 34, 10, 34, 12, 34, 303, 9, 34, 1, 34, 1, 34, 5, 34, 307, 8, 34, 10, 34, 12, 34, 310, 9, 34, 1, 34, 1, 34, 1, 35, 4, 35, 315, 8, 35, 11, 35, 12, 35, 316, 1, 35, 5, 35, 320, 8, 35, 10, 35, 12, 35, 323, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 5, 40, 346, 8, 40, 10, 40, 12, 40, 349, 9, 40, 1, 40, 1, 40, 5, 40, 353, 8, 40, 10, 40, 12, 40, 356, 9, 40, 1, 40, 1, 40, 5, 40, 360, 8, 40, 10, 40, 12, 40, 363, 9, 40, 1, 40, 1, 40, 5, 40, 367, 8, 40, 10, 40, 12, 40, 370, 9, 40, 1, 40, 1, 40, 1, 40, 5, 40, 375, 8, 40, 10, 40, 12, 40, 378, 9, 40, 1, 40, 3, 40, 381, 8, 40, 1, 41, 5, 41, 384, 8, 41, 10, 41, 12, 41, 387, 9, 41, 1, 41, 1, 41, 5, 41, 391, 8, 41, 10, 41, 12, 41, 394, 9, 41, 1, 41, 1, 41, 5, 41, 398, 8, 41, 10, 41, 12, 41, 401, 9, 41, 1, 41, 1, 41, 5, 41, 405, 8, 41, 10, 41, 12, 41, 408, 9, 41, 1, 41, 5, 41, 411, 8, 41, 10, 41, 12, 41, 414, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 434, 8, 43, 10, 43, 12, 43, 437, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 449, 8, 44, 10, 44, 12, 44, 452, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 3, 48, 479, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 498, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 512, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 583, 8, 53, 1, 54, 1, 54, 5, 54, 587, 8, 54, 10, 54, 12, 54, 590, 9, 54, 1, 54, 1, 54, 1, 55, 1, 55, 5, 55, 596, 8, 55, 10, 55, 12, 55, 599, 9, 55, 1, 55, 1, 55, 1, 56, 1, 56, 5, 56, 605, 8, 56, 10, 56, 12, 56, 608, 9, 56, 1, 57, 4, 57, 611, 8, 57, 11, 57, 12, 57, 612, 1, 58, 1, 58, 4, 58, 617, 8, 58, 11, 58, 12, 58, 618, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 3, 61, 632, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 3, 62, 642, 8, 62, 1, 62, 1, 62, 1, 62, 5, 62, 647, 8, 62, 10, 62, 12, 62, 650, 9, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 3, 65, 659, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 668, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 674, 8, 67, 10, 67, 12, 67, 677, 9, 67, 1, 67, 5, 67, 680, 8, 67, 10, 67, 12, 67, 683, 9, 67, 1, 67, 1, 67, 1, 68, 4, 68, 688, 8, 68, 11, 68, 12, 68, 689, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 3, 70, 697, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 5, 71, 706, 8, 71, 10, 71, 12, 71, 709, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 5, 72, 715, 8, 72, 10, 72, 12, 72, 718, 9, 72, 1, 73, 4, 73, 721, 8, 73, 11, 73, 12, 73, 722, 1, 74, 1, 74, 1, 75, 3, 75, 728, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 4, 76, 736, 8, 76, 11, 76, 12, 76, 737, 7, 354, 368, 376, 392, 435, 450, 689, 0, 77, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20, 0, 22, 0, 24, 0, 26, 0, 28, 0, 30, 0, 32, 0, 34, 0, 36, 0, 38, 0, 40, 0, 42, 0, 44, 0, 46, 0, 48, 0, 50, 0, 52, 0, 54, 0, 56, 0, 58, 0, 60, 0, 62, 0, 64, 0, 66, 1, 68, 2, 70, 3, 72, 4, 74, 5, 76, 6, 78, 7, 80, 8, 82, 9, 84, 10, 86, 11, 88, 12, 90, 13, 92, 14, 94, 15, 96, 16, 98, 17, 100, 0, 102, 0, 104, 18, 106, 19, 108, 20, 110, 21, 112, 22, 114, 23, 116, 24, 118, 25, 120, 26, 122, 27, 124, 0, 126, 0, 128, 28, 130, 29, 132, 30, 134, 0, 136, 0, 138, 31, 140, 32, 142, 33, 144, 0, 146, 34, 148, 35, 150, 36, 152, 37, 154, 38, 156, 39, 158, 40, 6, 0, 1, 2, 3, 4, 5, 40, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 4, 0, 9, 9, 32, 32, 160, 160, 65279, 65279, 2, 0, 42, 43, 45, 45, 2, 0, 10, 10, 13, 13, 4, 0, 10, 10, 13, 13, 91, 91, 93, 93, 3, 0, 10, 10, 13, 13, 40, 41, 7, 0, 10, 10, 13, 13, 40, 41, 91, 91, 93, 93, 123, 123, 125, 125, 7, 0, 9, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 34, 34, 39, 39, 6, 0, 9, 10, 13, 13, 34, 34, 39, 39, 44, 44, 59, 59, 2, 0, 45, 45, 95, 95, 4, 0, 10, 10, 13, 13, 123, 123, 125, 125, 4, 0, 9, 10, 13, 13, 32, 32, 92, 92, 4, 0, 9, 10, 13, 13, 32, 32, 58, 58, 763, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 1, 100, 1, 0, 0, 0, 1, 102, 1, 0, 0, 0, 1, 104, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 1, 108, 1, 0, 0, 0, 1, 110, 1, 0, 0, 0, 1, 112, 1, 0, 0, 0, 1, 114, 1, 0, 0, 0, 1, 116, 1, 0, 0, 0, 1, 118, 1, 0, 0, 0, 1, 120, 1, 0, 0, 0, 1, 122, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 2, 126, 1, 0, 0, 0, 2, 128, 1, 0, 0, 0, 2, 130, 1, 0, 0, 0, 2, 132, 1, 0, 0, 0, 3, 134, 1, 0, 0, 0, 3, 136, 1, 0, 0, 0, 3, 138, 1, 0, 0, 0, 3, 140, 1, 0, 0, 0, 3, 142, 1, 0, 0, 0, 4, 144, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 4, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 5, 156, 1, 0, 0, 0, 5, 158, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 164, 1, 0, 0, 0, 12, 166, 1, 0, 0, 0, 14, 168, 1, 0, 0, 0, 16, 170, 1, 0, 0, 0, 18, 172, 1, 0, 0, 0, 20, 174, 1, 0, 0, 0, 22, 176, 1, 0, 0, 0, 24, 178, 1, 0, 0, 0, 26, 180, 1, 0, 0, 0, 28, 182, 1, 0, 0, 0, 30, 184, 1, 0, 0, 0, 32, 186, 1, 0, 0, 0, 34, 188, 1, 0, 0, 0, 36, 190, 1, 0, 0, 0, 38, 192, 1, 0, 0, 0, 40, 194, 1, 0, 0, 0, 42, 196, 1, 0, 0, 0, 44, 198, 1, 0, 0, 0, 46, 200, 1, 0, 0, 0, 48, 202, 1, 0, 0, 0, 50, 204, 1, 0, 0, 0, 52, 206, 1, 0, 0, 0, 54, 208, 1, 0, 0, 0, 56, 210, 1, 0, 0, 0, 58, 212, 1, 0, 0, 0, 60, 214, 1, 0, 0, 0, 62, 216, 1, 0, 0, 0, 64, 218, 1, 0, 0, 0, 66, 221, 1, 0, 0, 0, 68, 226, 1, 0, 0, 0, 70, 235, 1, 0, 0, 0, 72, 280, 1, 0, 0, 0, 74, 301, 1, 0, 0, 0, 76, 314, 1, 0, 0, 0, 78, 328, 1, 0, 0, 0, 80, 332, 1, 0, 0, 0, 82, 336, 1, 0, 0, 0, 84, 340, 1, 0, 0, 0, 86, 347, 1, 0, 0, 0, 88, 385, 1, 0, 0, 0, 90, 415, 1, 0, 0, 0, 92, 429, 1, 0, 0, 0, 94, 443, 1, 0, 0, 0, 96, 457, 1, 0, 0, 0, 98, 471, 1, 0, 0, 0, 100, 473, 1, 0, 0, 0, 102, 478, 1, 0, 0, 0, 104, 485, 1, 0, 0, 0, 106, 487, 1, 0, 0, 0, 108, 489, 1, 0, 0, 0, 110, 499, 1, 0, 0, 0, 112, 582, 1, 0, 0, 0, 114, 584, 1, 0, 0, 0, 116, 593, 1, 0, 0, 0, 118, 602, 1, 0, 0, 0, 120, 610, 1, 0, 0, 0, 122, 614, 1, 0, 0, 0, 124, 622, 1, 0, 0, 0, 126, 626, 1, 0, 0, 0, 128, 631, 1, 0, 0, 0, 130, 641, 1, 0, 0, 0, 132, 651, 1, 0, 0, 0, 134, 653, 1, 0, 0, 0, 136, 658, 1, 0, 0, 0, 138, 665, 1, 0, 0, 0, 140, 669, 1, 0, 0, 0, 142, 687, 1, 0, 0, 0, 144, 691, 1, 0, 0, 0, 146, 696, 1, 0, 0, 0, 148, 703, 1, 0, 0, 0, 150, 712, 1, 0, 0, 0, 152, 720, 1, 0, 0, 0, 154, 724, 1, 0, 0, 0, 156, 727, 1, 0, 0, 0, 158, 735, 1, 0, 0, 0, 160, 161, 7, 0, 0, 0, 161, 7, 1, 0, 0, 0, 162, 163, 7, 1, 0, 0, 163, 9, 1, 0, 0, 0, 164, 165, 7, 2, 0, 0, 165, 11, 1, 0, 0, 0, 166, 167, 7, 3, 0, 0, 167, 13, 1, 0, 0, 0, 168, 169, 7, 4, 0, 0, 169, 15, 1, 0, 0, 0, 170, 171, 7, 5, 0, 0, 171, 17, 1, 0, 0, 0, 172, 173, 7, 6, 0, 0, 173, 19, 1, 0, 0, 0, 174, 175, 7, 7, 0, 0, 175, 21, 1, 0, 0, 0, 176, 177, 7, 8, 0, 0, 177, 23, 1, 0, 0, 0, 178, 179, 7, 9, 0, 0, 179, 25, 1, 0, 0, 0, 180, 181, 7, 10, 0, 0, 181, 27, 1, 0, 0, 0, 182, 183, 7, 11, 0, 0, 183, 29, 1, 0, 0, 0, 184, 185, 7, 12, 0, 0, 185, 31, 1, 0, 0, 0, 186, 187, 7, 13, 0, 0, 187, 33, 1, 0, 0, 0, 188, 189, 7, 14, 0, 0, 189, 35, 1, 0, 0, 0, 190, 191, 7, 15, 0, 0, 191, 37, 1, 0, 0, 0, 192, 193, 7, 16, 0, 0, 193, 39, 1, 0, 0, 0, 194, 195, 7, 17, 0, 0, 195, 41, 1, 0, 0, 0, 196, 197, 7, 18, 0, 0, 197, 43, 1, 0, 0, 0, 198, 199, 7, 19, 0, 0, 199, 45, 1, 0, 0, 0, 200, 201, 7, 20, 0, 0, 201, 47, 1, 0, 0, 0, 202, 203, 7, 21, 0, 0, 203, 49, 1, 0, 0, 0, 204, 205, 7, 22, 0, 0, 205, 51, 1, 0, 0, 0, 206, 207, 7, 23, 0, 0, 207, 53, 1, 0, 0, 0, 208, 209, 7, 24, 0, 0, 209, 55, 1, 0, 0, 0, 210, 211, 7, 25, 0, 0, 211, 57, 1, 0, 0, 0, 212, 213, 7, 26, 0, 0, 213, 59, 1, 0, 0, 0, 214, 215, 2, 48, 57, 0, 215, 61, 1, 0, 0, 0, 216, 217, 7, 27, 0, 0, 217, 63, 1, 0, 0, 0, 218, 219, 7, 28, 0, 0, 219, 65, 1, 0, 0, 0, 220, 222, 3, 62, 28, 0, 221, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 67, 1, 0, 0, 0, 225, 227, 5, 13, 0, 0, 226, 225, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 229, 5, 10, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 31, 0, 0, 231, 69, 1, 0, 0, 0, 232, 234, 3, 66, 30, 0, 233, 232, 1, 0, 0, 0, 234, 237, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 238, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 238, 242, 5, 62, 0, 0, 239, 241, 3, 66, 30, 0, 240, 239, 1, 0, 0, 0, 241, 244, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 245, 246, 5, 33, 0, 0, 246, 247, 5, 35, 0, 0, 247, 248, 5, 32, 0, 0, 248, 249, 5, 64, 0, 0, 249, 250, 5, 113, 0, 0, 250, 251, 5, 110, 0, 0, 251, 252, 5, 97, 0, 0, 252, 253, 5, 46, 0, 0, 253, 254, 5, 112, 0, 0, 254, 255, 5, 97, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 114, 0, 0, 257, 258, 5, 46, 0, 0, 258, 259, 5, 115, 0, 0, 259, 260, 5, 111, 0, 0, 260, 261, 5, 117, 0, 0, 261, 262, 5, 114, 0, 0, 262, 263, 5, 99, 0, 0, 263, 264, 5, 101, 0, 0, 264, 268, 1, 0, 0, 0, 265, 267, 3, 66, 30, 0, 266, 265, 1, 0, 0, 0, 267, 270, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 271, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 271, 273, 5, 61, 0, 0, 272, 274, 8, 29, 0, 0, 273, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 71, 1, 0, 0, 0, 277, 279, 3, 66, 30, 0, 278, 277, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 283, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 283, 287, 5, 62, 0, 0, 284, 286, 3, 66, 30, 0, 285, 284, 1, 0, 0, 0, 286, 289, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 290, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 290, 291, 5, 33, 0, 0, 291, 292, 5, 35, 0, 0, 292, 294, 1, 0, 0, 0, 293, 295, 8, 29, 0, 0, 294, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 73, 1, 0, 0, 0, 298, 300, 3, 66, 30, 0, 299, 298, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 304, 308, 5, 62, 0, 0, 305, 307, 8, 29, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 312, 6, 34, 0, 0, 312, 75, 1, 0, 0, 0, 313, 315, 5, 35, 0, 0, 314, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 321, 1, 0, 0, 0, 318, 320, 3, 66, 30, 0, 319, 318, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 324, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, 325, 5, 63, 0, 0, 325, 326, 1, 0, 0, 0, 326, 327, 6, 35, 1, 0, 327, 77, 1, 0, 0, 0, 328, 329, 5, 35, 0, 0, 329, 330, 1, 0, 0, 0, 330, 331, 6, 36, 2, 0, 331, 79, 1, 0, 0, 0, 332, 333, 3, 64, 29, 0, 333, 334, 1, 0, 0, 0, 334, 335, 6, 37, 3, 0, 335, 81, 1, 0, 0, 0, 336, 337, 5, 36, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 6, 38, 4, 0, 339, 83, 1, 0, 0, 0, 340, 341, 5, 64, 0, 0, 341, 342, 1, 0, 0, 0, 342, 343, 6, 39, 5, 0, 343, 85, 1, 0, 0, 0, 344, 346, 3, 66, 30, 0, 345, 344, 1, 0, 0, 0, 346, 349, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 350, 1, 0, 0, 0, 349, 347, 1, 0, 0, 0, 350, 354, 5, 91, 0, 0, 351, 353, 8, 30, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 361, 5, 93, 0, 0, 358, 360, 3, 66, 30, 0, 359, 358, 1, 0, 0, 0, 360, 363, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 380, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 364, 368, 5, 40, 0, 0, 365, 367, 8, 31, 0, 0, 366, 365, 1, 0, 0, 0, 367, 370, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 371, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 371, 381, 5, 41, 0, 0, 372, 376, 5, 91, 0, 0, 373, 375, 8, 30, 0, 0, 374, 373, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 379, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 379, 381, 5, 93, 0, 0, 380, 364, 1, 0, 0, 0, 380, 372, 1, 0, 0, 0, 381, 87, 1, 0, 0, 0, 382, 384, 3, 66, 30, 0, 383, 382, 1, 0, 0, 0, 384, 387, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 388, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 388, 392, 5, 91, 0, 0, 389, 391, 8, 30, 0, 0, 390, 389, 1, 0, 0, 0, 391, 394, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 395, 399, 5, 93, 0, 0, 396, 398, 3, 66, 30, 0, 397, 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 402, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402, 406, 5, 58, 0, 0, 403, 405, 3, 66, 30, 0, 404, 403, 1, 0, 0, 0, 405, 408, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 412, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 409, 411, 8, 29, 0, 0, 410, 409, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 89, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 5, 42, 0, 0, 416, 417, 5, 42, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 3, 16, 5, 0, 419, 420, 3, 22, 8, 0, 420, 421, 3, 28, 11, 0, 421, 422, 3, 44, 19, 0, 422, 423, 3, 14, 4, 0, 423, 424, 3, 40, 17, 0, 424, 425, 3, 42, 18, 0, 425, 426, 5, 58, 0, 0, 426, 427, 5, 42, 0, 0, 427, 428, 5, 42, 0, 0, 428, 91, 1, 0, 0, 0, 429, 430, 5, 60, 0, 0, 430, 431, 5, 97, 0, 0, 431, 435, 1, 0, 0, 0, 432, 434, 9, 0, 0, 0, 433, 432, 1, 0, 0, 0, 434, 437, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 435, 1, 0, 0, 0, 438, 439, 5, 60, 0, 0, 439, 440, 5, 47, 0, 0, 440, 441, 5, 97, 0, 0, 441, 442, 5, 62, 0, 0, 442, 93, 1, 0, 0, 0, 443, 444, 5, 96, 0, 0, 444, 445, 5, 96, 0, 0, 445, 446, 5, 96, 0, 0, 446, 450, 1, 0, 0, 0, 447, 449, 9, 0, 0, 0, 448, 447, 1, 0, 0, 0, 449, 452, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 451, 453, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 453, 454, 5, 96, 0, 0, 454, 455, 5, 96, 0, 0, 455, 456, 5, 96, 0, 0, 456, 95, 1, 0, 0, 0, 457, 458, 5, 42, 0, 0, 458, 459, 5, 42, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 3, 36, 15, 0, 461, 462, 3, 40, 17, 0, 462, 463, 3, 34, 14, 0, 463, 464, 3, 30, 12, 0, 464, 465, 3, 36, 15, 0, 465, 466, 3, 44, 19, 0, 466, 467, 3, 42, 18, 0, 467, 468, 5, 58, 0, 0, 468, 469, 5, 42, 0, 0, 469, 470, 5, 42, 0, 0, 470, 97, 1, 0, 0, 0, 471, 472, 9, 0, 0, 0, 472, 99, 1, 0, 0, 0, 473, 474, 3, 66, 30, 0, 474, 475, 1, 0, 0, 0, 475, 476, 6, 47, 6, 0, 476, 101, 1, 0, 0, 0, 477, 479, 5, 13, 0, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 5, 10, 0, 0, 481, 482, 1, 0, 0, 0, 482, 483, 6, 48, 7, 0, 483, 484, 6, 48, 8, 0, 484, 103, 1, 0, 0, 0, 485, 486, 5, 61, 0, 0, 486, 105, 1, 0, 0, 0, 487, 488, 5, 44, 0, 0, 488, 107, 1, 0, 0, 0, 489, 490, 3, 20, 7, 0, 490, 491, 3, 6, 0, 0, 491, 492, 3, 42, 18, 0, 492, 493, 3, 40, 17, 0, 493, 494, 3, 34, 14, 0, 494, 495, 3, 28, 11, 0, 495, 497, 3, 14, 4, 0, 496, 498, 3, 42, 18, 0, 497, 496, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 109, 1, 0, 0, 0, 499, 500, 3, 46, 20, 0, 500, 501, 3, 42, 18, 0, 501, 502, 3, 14, 4, 0, 502, 503, 3, 42, 18, 0, 503, 504, 3, 16, 5, 0, 504, 505, 3, 14, 4, 0, 505, 506, 3, 6, 0, 0, 506, 507, 3, 44, 19, 0, 507, 508, 3, 46, 20, 0, 508, 509, 3, 40, 17, 0, 509, 511, 3, 14, 4, 0, 510, 512, 3, 42, 18, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 111, 1, 0, 0, 0, 513, 514, 3, 42, 18, 0, 514, 515, 3, 22, 8, 0, 515, 516, 3, 30, 12, 0, 516, 517, 3, 36, 15, 0, 517, 518, 3, 28, 11, 0, 518, 519, 3, 14, 4, 0, 519, 583, 1, 0, 0, 0, 520, 521, 3, 28, 11, 0, 521, 522, 3, 22, 8, 0, 522, 523, 3, 42, 18, 0, 523, 524, 3, 44, 19, 0, 524, 583, 1, 0, 0, 0, 525, 526, 3, 40, 17, 0, 526, 527, 3, 14, 4, 0, 527, 528, 3, 18, 6, 0, 528, 529, 3, 14, 4, 0, 529, 530, 3, 52, 23, 0, 530, 583, 1, 0, 0, 0, 531, 532, 3, 36, 15, 0, 532, 533, 3, 40, 17, 0, 533, 534, 3, 14, 4, 0, 534, 535, 3, 8, 1, 0, 535, 536, 3, 46, 20, 0, 536, 537, 3, 22, 8, 0, 537, 538, 3, 28, 11, 0, 538, 539, 3, 44, 19, 0, 539, 583, 1, 0, 0, 0, 540, 541, 3, 10, 2, 0, 541, 542, 3, 34, 14, 0, 542, 543, 3, 30, 12, 0, 543, 544, 3, 36, 15, 0, 544, 545, 3, 34, 14, 0, 545, 546, 3, 42, 18, 0, 546, 547, 3, 22, 8, 0, 547, 548, 3, 44, 19, 0, 548, 549, 3, 14, 4, 0, 549, 583, 1, 0, 0, 0, 550, 551, 3, 30, 12, 0, 551, 552, 3, 28, 11, 0, 552, 583, 1, 0, 0, 0, 553, 554, 3, 36, 15, 0, 554, 555, 3, 6, 0, 0, 555, 556, 3, 44, 19, 0, 556, 557, 3, 44, 19, 0, 557, 558, 3, 14, 4, 0, 558, 559, 3, 40, 17, 0, 559, 560, 3, 32, 13, 0, 560, 561, 3, 6, 0, 0, 561, 562, 3, 32, 13, 0, 562, 563, 3, 54, 24, 0, 563, 583, 1, 0, 0, 0, 564, 565, 3, 36, 15, 0, 565, 566, 3, 20, 7, 0, 566, 567, 3, 40, 17, 0, 567, 568, 3, 6, 0, 0, 568, 569, 3, 42, 18, 0, 569, 570, 3, 14, 4, 0, 570, 571, 3, 28, 11, 0, 571, 572, 3, 22, 8, 0, 572, 573, 3, 42, 18, 0, 573, 574, 3, 44, 19, 0, 574, 583, 1, 0, 0, 0, 575, 576, 3, 22, 8, 0, 576, 577, 3, 32, 13, 0, 577, 578, 3, 44, 19, 0, 578, 579, 3, 14, 4, 0, 579, 580, 3, 32, 13, 0, 580, 581, 3, 44, 19, 0, 581, 583, 1, 0, 0, 0, 582, 513, 1, 0, 0, 0, 582, 520, 1, 0, 0, 0, 582, 525, 1, 0, 0, 0, 582, 531, 1, 0, 0, 0, 582, 540, 1, 0, 0, 0, 582, 550, 1, 0, 0, 0, 582, 553, 1, 0, 0, 0, 582, 564, 1, 0, 0, 0, 582, 575, 1, 0, 0, 0, 583, 113, 1, 0, 0, 0, 584, 588, 5, 40, 0, 0, 585, 587, 8, 29, 0, 0, 586, 585, 1, 0, 0, 0, 587, 590, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 591, 592, 5, 41, 0, 0, 592, 115, 1, 0, 0, 0, 593, 597, 5, 91, 0, 0, 594, 596, 8, 32, 0, 0, 595, 594, 1, 0, 0, 0, 596, 599, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 600, 601, 5, 93, 0, 0, 601, 117, 1, 0, 0, 0, 602, 606, 5, 47, 0, 0, 603, 605, 8, 29, 0, 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 119, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 611, 8, 33, 0, 0, 610, 609, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 121, 1, 0, 0, 0, 614, 616, 7, 34, 0, 0, 615, 617, 8, 35, 0, 0, 616, 615, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 7, 34, 0, 0, 621, 123, 1, 0, 0, 0, 622, 623, 3, 66, 30, 0, 623, 624, 1, 0, 0, 0, 624, 625, 6, 59, 6, 0, 625, 125, 1, 0, 0, 0, 626, 627, 5, 35, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 6, 60, 9, 0, 629, 127, 1, 0, 0, 0, 630, 632, 5, 13, 0, 0, 631, 630, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 5, 10, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 6, 61, 0, 0, 636, 637, 6, 61, 8, 0, 637, 129, 1, 0, 0, 0, 638, 642, 3, 58, 26, 0, 639, 642, 3, 60, 27, 0, 640, 642, 5, 95, 0, 0, 641, 638, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 641, 640, 1, 0, 0, 0, 642, 648, 1, 0, 0, 0, 643, 647, 3, 58, 26, 0, 644, 647, 3, 60, 27, 0, 645, 647, 7, 36, 0, 0, 646, 643, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 646, 645, 1, 0, 0, 0, 647, 650, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 131, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 651, 652, 5, 46, 0, 0, 652, 133, 1, 0, 0, 0, 653, 654, 3, 66, 30, 0, 654, 655, 1, 0, 0, 0, 655, 656, 6, 64, 6, 0, 656, 135, 1, 0, 0, 0, 657, 659, 5, 13, 0, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 661, 5, 10, 0, 0, 661, 662, 1, 0, 0, 0, 662, 663, 6, 65, 7, 0, 663, 664, 6, 65, 8, 0, 664, 137, 1, 0, 0, 0, 665, 667, 5, 92, 0, 0, 666, 668, 8, 29, 0, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 139, 1, 0, 0, 0, 669, 681, 5, 123, 0, 0, 670, 680, 8, 37, 0, 0, 671, 675, 5, 123, 0, 0, 672, 674, 8, 29, 0, 0, 673, 672, 1, 0, 0, 0, 674, 677, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 678, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 678, 680, 5, 125, 0, 0, 679, 670, 1, 0, 0, 0, 679, 671, 1, 0, 0, 0, 680, 683, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 682, 1, 0, 0, 0, 682, 684, 1, 0, 0, 0, 683, 681, 1, 0, 0, 0, 684, 685, 5, 125, 0, 0, 685, 141, 1, 0, 0, 0, 686, 688, 8, 38, 0, 0, 687, 686, 1, 0, 0, 0, 688, 689, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 690, 143, 1, 0, 0, 0, 691, 692, 3, 66, 30, 0, 692, 693, 1, 0, 0, 0, 693, 694, 6, 69, 6, 0, 694, 145, 1, 0, 0, 0, 695, 697, 5, 13, 0, 0, 696, 695, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 5, 10, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 6, 70, 0, 0, 701, 702, 6, 70, 8, 0, 702, 147, 1, 0, 0, 0, 703, 707, 5, 91, 0, 0, 704, 706, 8, 32, 0, 0, 705, 704, 1, 0, 0, 0, 706, 709, 1, 0, 0, 0, 707, 705, 1, 0, 0, 0, 707, 708, 1, 0, 0, 0, 708, 710, 1, 0, 0, 0, 709, 707, 1, 0, 0, 0, 710, 711, 5, 93, 0, 0, 711, 149, 1, 0, 0, 0, 712, 716, 5, 47, 0, 0, 713, 715, 8, 29, 0, 0, 714, 713, 1, 0, 0, 0, 715, 718, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 151, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 719, 721, 8, 39, 0, 0, 720, 719, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 153, 1, 0, 0, 0, 724, 725, 5, 58, 0, 0, 725, 155, 1, 0, 0, 0, 726, 728, 5, 13, 0, 0, 727, 726, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 730, 5, 10, 0, 0, 730, 731, 1, 0, 0, 0, 731, 732, 6, 75, 0, 0, 732, 733, 6, 75, 8, 0, 733, 157, 1, 0, 0, 0, 734, 736, 8, 29, 0, 0, 735, 734, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 735, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 159, 1, 0, 0, 0, 57, 0, 1, 2, 3, 4, 5, 223, 226, 235, 242, 268, 275, 280, 287, 296, 301, 308, 316, 321, 347, 354, 361, 368, 376, 380, 385, 392, 399, 406, 412, 435, 450, 478, 497, 511, 582, 588, 597, 606, 612, 618, 631, 641, 646, 648, 658, 667, 675, 679, 681, 689, 696, 707, 716, 722, 727, 737, 10, 6, 0, 0, 5, 5, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 1, 0, 7, 1, 0, 7, 2, 0, 4, 0, 0, 7, 7, 0] \ No newline at end of file diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs index 2f1efd8dca..b9c082bc6b 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.cs @@ -139,6 +139,9 @@ [System.Diagnostics.DebuggerNonUserCode] public ParagraphContext[] paragraph() { [System.Diagnostics.DebuggerNonUserCode] public ParagraphContext paragraph(int i) { return GetRuleContext(i); } + [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext commentDefinition() { + return GetRuleContext(0); + } public FileContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -166,31 +169,67 @@ public override TResult Accept(IParseTreeVisitor visitor) { public FileContext file() { FileContext _localctx = new FileContext(Context, State); EnterRule(_localctx, 0, RULE_file); + int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 121; + State = 128; ErrorHandler.Sync(this); - _alt = 1+1; - do { - switch (_alt) { - case 1+1: - { - { - State = 120; - paragraph(); - } + switch (TokenStream.LA(1)) { + case WS: + case NEWLINE: + case QNA_SOURCE_INFO: + case MODEL_INFO: + case QNA: + case HASH: + case DOLLAR: + case AT: + case IMPORT: + case REFERENCE: + case QNA_ID_MARK: + { + State = 121; + ErrorHandler.Sync(this); + _alt = 1+1; + do { + switch (_alt) { + case 1+1: + { + { + State = 120; + paragraph(); + } + } + break; + default: + throw new NoViableAltException(this); } - break; - default: - throw new NoViableAltException(this); + State = 123; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,0,Context); + } while ( _alt!=1 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } - State = 123; + break; + case Eof: + case COMMENT: + { + State = 126; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,0,Context); - } while ( _alt!=1 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); - State = 125; + _la = TokenStream.LA(1); + if (_la==COMMENT) { + { + State = 125; + commentDefinition(); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + State = 130; Match(Eof); } } @@ -231,9 +270,6 @@ [System.Diagnostics.DebuggerNonUserCode] public QnaSectionContext qnaSection() { [System.Diagnostics.DebuggerNonUserCode] public ModelInfoSectionContext modelInfoSection() { return GetRuleContext(0); } - [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext commentDefinition() { - return GetRuleContext(0); - } public ParagraphContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -262,79 +298,72 @@ public ParagraphContext paragraph() { ParagraphContext _localctx = new ParagraphContext(Context, State); EnterRule(_localctx, 2, RULE_paragraph); try { - State = 137; + State = 141; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,1,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,3,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 127; + State = 132; Match(NEWLINE); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 128; + State = 133; nestedIntentSection(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 129; + State = 134; simpleIntentSection(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 130; + State = 135; entitySection(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 131; + State = 136; newEntitySection(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 132; + State = 137; importSection(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 133; + State = 138; referenceSection(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 134; + State = 139; qnaSection(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 135; + State = 140; modelInfoSection(); } break; - case 10: - EnterOuterAlt(_localctx, 10); - { - State = 136; - commentDefinition(); - } - break; } } catch (RecognitionException re) { @@ -386,21 +415,21 @@ public NewlineContext newline() { try { EnterOuterAlt(_localctx, 1); { - State = 142; + State = 146; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 139; + State = 143; Match(WS); } } - State = 144; + State = 148; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 145; + State = 149; _la = TokenStream.LA(1); if ( !(_la==Eof || _la==NEWLINE) ) { ErrorHandler.RecoverInline(this); @@ -452,21 +481,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { public CommentDefinitionContext commentDefinition() { CommentDefinitionContext _localctx = new CommentDefinitionContext(Context, State); EnterRule(_localctx, 6, RULE_commentDefinition); + int _la; try { EnterOuterAlt(_localctx, 1); { - State = 147; + State = 151; Match(COMMENT); - State = 149; + State = 153; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,3,Context) ) { - case 1: + _la = TokenStream.LA(1); + if (_la==NEWLINE) { { - State = 148; + State = 152; Match(NEWLINE); } - break; } + } } catch (RecognitionException re) { @@ -521,7 +551,7 @@ public ErrorStringContext errorString() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 152; + State = 156; ErrorHandler.Sync(this); _alt = 1; do { @@ -529,7 +559,7 @@ public ErrorStringContext errorString() { case 1: { { - State = 151; + State = 155; _la = TokenStream.LA(1); if ( !(_la==WS || _la==INVALID_TOKEN_DEFAULT_MODE) ) { ErrorHandler.RecoverInline(this); @@ -544,9 +574,9 @@ public ErrorStringContext errorString() { default: throw new NoViableAltException(this); } - State = 154; + State = 158; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,4,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,6,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -598,9 +628,9 @@ public NestedIntentSectionContext nestedIntentSection() { try { EnterOuterAlt(_localctx, 1); { - State = 156; + State = 160; nestedIntentNameLine(); - State = 157; + State = 161; nestedIntentBodyDefinition(); } } @@ -655,37 +685,37 @@ public NestedIntentNameLineContext nestedIntentNameLine() { try { EnterOuterAlt(_localctx, 1); { - State = 162; + State = 166; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 159; + State = 163; Match(WS); } } - State = 164; + State = 168; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 165; - Match(HASH); State = 169; + Match(HASH); + State = 173; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 166; + State = 170; Match(WS); } } - State = 171; + State = 175; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 172; + State = 176; nestedIntentName(); } } @@ -742,26 +772,26 @@ public NestedIntentNameContext nestedIntentName() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 174; + State = 178; nameIdentifier(); - State = 179; + State = 183; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,8,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,10,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 177; + State = 181; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case WS: { - State = 175; + State = 179; Match(WS); } break; case IDENTIFIER: { - State = 176; + State = 180; nameIdentifier(); } break; @@ -770,9 +800,9 @@ public NestedIntentNameContext nestedIntentName() { } } } - State = 181; + State = 185; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,8,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,10,Context); } } } @@ -827,21 +857,21 @@ public NameIdentifierContext nameIdentifier() { try { EnterOuterAlt(_localctx, 1); { - State = 182; + State = 186; Match(IDENTIFIER); - State = 187; + State = 191; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==DOT) { { { - State = 183; + State = 187; Match(DOT); - State = 184; + State = 188; Match(IDENTIFIER); } } - State = 189; + State = 193; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -896,7 +926,7 @@ public NestedIntentBodyDefinitionContext nestedIntentBodyDefinition() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 191; + State = 195; ErrorHandler.Sync(this); _alt = 1; do { @@ -904,7 +934,7 @@ public NestedIntentBodyDefinitionContext nestedIntentBodyDefinition() { case 1: { { - State = 190; + State = 194; subIntentDefinition(); } } @@ -912,9 +942,9 @@ public NestedIntentBodyDefinitionContext nestedIntentBodyDefinition() { default: throw new NoViableAltException(this); } - State = 193; + State = 197; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,10,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,12,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -969,23 +999,23 @@ public SubIntentDefinitionContext subIntentDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 198; + State = 202; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 195; + State = 199; Match(WS); } } - State = 200; + State = 204; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 201; + State = 205; Match(HASH); - State = 202; + State = 206; simpleIntentSection(); } } @@ -1034,7 +1064,7 @@ public SimpleIntentSectionContext simpleIntentSection() { try { EnterOuterAlt(_localctx, 1); { - State = 204; + State = 208; intentDefinition(); } } @@ -1086,14 +1116,14 @@ public IntentDefinitionContext intentDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 206; + State = 210; intentNameLine(); - State = 208; + State = 212; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,12,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,14,Context) ) { case 1: { - State = 207; + State = 211; intentBody(); } break; @@ -1154,47 +1184,47 @@ public IntentNameLineContext intentNameLine() { try { EnterOuterAlt(_localctx, 1); { - State = 213; + State = 217; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 210; + State = 214; Match(WS); } } - State = 215; + State = 219; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 216; + State = 220; Match(HASH); - State = 218; + State = 222; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==HASH) { { - State = 217; + State = 221; Match(HASH); } } - State = 223; + State = 227; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 220; + State = 224; Match(WS); } } - State = 225; + State = 229; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 226; + State = 230; intentName(); } } @@ -1251,26 +1281,26 @@ public IntentNameContext intentName() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 228; + State = 232; nameIdentifier(); - State = 233; + State = 237; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,19,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 231; + State = 235; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case WS: { - State = 229; + State = 233; Match(WS); } break; case IDENTIFIER: { - State = 230; + State = 234; nameIdentifier(); } break; @@ -1279,9 +1309,9 @@ public IntentNameContext intentName() { } } } - State = 235; + State = 239; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,19,Context); } } } @@ -1335,23 +1365,23 @@ public IntentBodyContext intentBody() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 239; + State = 243; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,18,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,20,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 236; + State = 240; Match(WS); } } } - State = 241; + State = 245; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,18,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,20,Context); } - State = 242; + State = 246; normalIntentBody(); } } @@ -1377,12 +1407,6 @@ [System.Diagnostics.DebuggerNonUserCode] public ErrorStringContext[] errorString [System.Diagnostics.DebuggerNonUserCode] public ErrorStringContext errorString(int i) { return GetRuleContext(i); } - [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext[] commentDefinition() { - return GetRuleContexts(); - } - [System.Diagnostics.DebuggerNonUserCode] public CommentDefinitionContext commentDefinition(int i) { - return GetRuleContext(i); - } [System.Diagnostics.DebuggerNonUserCode] public NormalIntentStringContext[] normalIntentString() { return GetRuleContexts(); } @@ -1426,63 +1450,57 @@ public NormalIntentBodyContext normalIntentBody() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 247; + State = 251; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,19,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,21,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 244; + State = 248; Match(WS); } } } - State = 249; + State = 253; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,19,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,21,Context); } - State = 255; + State = 258; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 255; + State = 258; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,20,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,22,Context) ) { case 1: { { - State = 250; + State = 254; normalIntentString(); - State = 251; + State = 255; newline(); } } break; case 2: { - State = 253; + State = 257; errorString(); } break; - case 3: - { - State = 254; - commentDefinition(); - } - break; } } break; default: throw new NoViableAltException(this); } - State = 257; + State = 260; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,21,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -1547,30 +1565,30 @@ public NormalIntentStringContext normalIntentString() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 262; + State = 265; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 259; + State = 262; Match(WS); } } - State = 264; + State = 267; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 265; + State = 268; Match(DASH); - State = 269; + State = 272; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,25,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 266; + State = 269; _la = TokenStream.LA(1); if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 15032385538L) != 0) ) { ErrorHandler.RecoverInline(this); @@ -1582,9 +1600,9 @@ public NormalIntentStringContext normalIntentString() { } } } - State = 271; + State = 274; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,25,Context); } } } @@ -1633,7 +1651,7 @@ public NewEntitySectionContext newEntitySection() { try { EnterOuterAlt(_localctx, 1); { - State = 272; + State = 275; newEntityDefinition(); } } @@ -1685,14 +1703,14 @@ public NewEntityDefinitionContext newEntityDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 274; + State = 277; newEntityLine(); - State = 276; + State = 279; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,26,Context) ) { case 1: { - State = 275; + State = 278; newEntityListbody(); } break; @@ -1760,29 +1778,29 @@ public NewEntityListbodyContext newEntityListbody() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 282; + State = 285; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 282; + State = 285; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,25,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,27,Context) ) { case 1: { { - State = 278; + State = 281; normalItemString(); - State = 279; + State = 282; newline(); } } break; case 2: { - State = 281; + State = 284; errorString(); } break; @@ -1792,9 +1810,9 @@ public NewEntityListbodyContext newEntityListbody() { default: throw new NoViableAltException(this); } - State = 284; + State = 287; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -1872,186 +1890,186 @@ public NewEntityLineContext newEntityLine() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 289; + State = 292; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 286; + State = 289; Match(WS); } } - State = 291; + State = 294; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 292; + State = 295; Match(AT); - State = 296; + State = 299; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,30,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 293; + State = 296; Match(WS); } } } - State = 298; + State = 301; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,30,Context); } - State = 300; + State = 303; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==NEW_ENTITY_TYPE_IDENTIFIER) { { - State = 299; + State = 302; newEntityType(); } } - State = 305; + State = 308; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,30,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,32,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 302; + State = 305; Match(WS); } } } - State = 307; + State = 310; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,30,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,32,Context); } - State = 310; + State = 313; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,31,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,33,Context) ) { case 1: { - State = 308; + State = 311; newEntityName(); } break; case 2: { - State = 309; + State = 312; newEntityNameWithWS(); } break; } - State = 315; + State = 318; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,32,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,34,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 312; + State = 315; Match(WS); } } } - State = 317; + State = 320; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,32,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,34,Context); } - State = 319; + State = 322; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,33,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,35,Context) ) { case 1: { - State = 318; + State = 321; newEntityRoles(); } break; } - State = 324; + State = 327; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,34,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,36,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 321; + State = 324; Match(WS); } } } - State = 326; + State = 329; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,34,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,36,Context); } - State = 328; + State = 331; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==HAS_FEATURES_LABEL) { { - State = 327; + State = 330; newEntityUsesFeatures(); } } - State = 333; + State = 336; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,36,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,38,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 330; + State = 333; Match(WS); } } } - State = 335; + State = 338; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,36,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,38,Context); } - State = 337; + State = 340; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==EQUAL) { { - State = 336; + State = 339; Match(EQUAL); } } - State = 342; + State = 345; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,38,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,40,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 339; + State = 342; Match(WS); } } } - State = 344; + State = 347; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,38,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,40,Context); } - State = 347; + State = 350; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case NEW_COMPOSITE_ENTITY: { - State = 345; + State = 348; newCompositeDefinition(); } break; case NEW_REGEX_ENTITY: { - State = 346; + State = 349; newRegexDefinition(); } break; @@ -2062,7 +2080,7 @@ public NewEntityLineContext newEntityLine() { default: break; } - State = 349; + State = 352; newline(); } } @@ -2109,7 +2127,7 @@ public NewCompositeDefinitionContext newCompositeDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 351; + State = 354; Match(NEW_COMPOSITE_ENTITY); } } @@ -2156,7 +2174,7 @@ public NewRegexDefinitionContext newRegexDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 353; + State = 356; Match(NEW_REGEX_ENTITY); } } @@ -2203,7 +2221,7 @@ public NewEntityTypeContext newEntityType() { try { EnterOuterAlt(_localctx, 1); { - State = 355; + State = 358; Match(NEW_ENTITY_TYPE_IDENTIFIER); } } @@ -2258,31 +2276,31 @@ public NewEntityRolesContext newEntityRoles() { try { EnterOuterAlt(_localctx, 1); { - State = 358; + State = 361; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==HAS_ROLES_LABEL) { { - State = 357; + State = 360; Match(HAS_ROLES_LABEL); } } - State = 363; + State = 366; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 360; + State = 363; Match(WS); } } - State = 365; + State = 368; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 366; + State = 369; newEntityRoleOrFeatures(); } } @@ -2337,23 +2355,23 @@ public NewEntityUsesFeaturesContext newEntityUsesFeatures() { try { EnterOuterAlt(_localctx, 1); { - State = 368; + State = 371; Match(HAS_FEATURES_LABEL); - State = 372; + State = 375; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 369; + State = 372; Match(WS); } } - State = 374; + State = 377; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 375; + State = 378; newEntityRoleOrFeatures(); } } @@ -2417,7 +2435,7 @@ public NewEntityRoleOrFeaturesContext newEntityRoleOrFeatures() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 377; + State = 380; _la = TokenStream.LA(1); if ( !(_la==NEW_ENTITY_IDENTIFIER || _la==NEW_ENTITY_IDENTIFIER_WITH_WS) ) { ErrorHandler.RecoverInline(this); @@ -2426,44 +2444,44 @@ public NewEntityRoleOrFeaturesContext newEntityRoleOrFeatures() { ErrorHandler.ReportMatch(this); Consume(); } - State = 394; + State = 397; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,45,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,47,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 381; + State = 384; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 378; + State = 381; Match(WS); } } - State = 383; + State = 386; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 384; + State = 387; Match(COMMA); - State = 388; + State = 391; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 385; + State = 388; Match(WS); } } - State = 390; + State = 393; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 391; + State = 394; _la = TokenStream.LA(1); if ( !(_la==NEW_ENTITY_IDENTIFIER || _la==NEW_ENTITY_IDENTIFIER_WITH_WS) ) { ErrorHandler.RecoverInline(this); @@ -2475,9 +2493,9 @@ public NewEntityRoleOrFeaturesContext newEntityRoleOrFeatures() { } } } - State = 396; + State = 399; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,45,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,47,Context); } } } @@ -2530,28 +2548,28 @@ public NewEntityNameContext newEntityName() { try { EnterOuterAlt(_localctx, 1); { - State = 397; + State = 400; Match(NEW_ENTITY_IDENTIFIER); - State = 405; + State = 408; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,47,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,49,Context) ) { case 1: { - State = 401; + State = 404; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 398; + State = 401; Match(WS); } } - State = 403; + State = 406; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 404; + State = 407; Match(PHRASE_LIST_LABEL); } break; @@ -2607,28 +2625,28 @@ public NewEntityNameWithWSContext newEntityNameWithWS() { try { EnterOuterAlt(_localctx, 1); { - State = 407; + State = 410; Match(NEW_ENTITY_IDENTIFIER_WITH_WS); - State = 415; + State = 418; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,49,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,51,Context) ) { case 1: { - State = 411; + State = 414; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 408; + State = 411; Match(WS); } } - State = 413; + State = 416; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 414; + State = 417; Match(PHRASE_LIST_LABEL); } break; @@ -2680,7 +2698,7 @@ public EntitySectionContext entitySection() { try { EnterOuterAlt(_localctx, 1); { - State = 417; + State = 420; entityDefinition(); } } @@ -2732,14 +2750,14 @@ public EntityDefinitionContext entityDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 419; + State = 422; entityLine(); - State = 421; + State = 424; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,50,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,52,Context) ) { case 1: { - State = 420; + State = 423; entityListBody(); } break; @@ -2801,48 +2819,48 @@ public EntityLineContext entityLine() { try { EnterOuterAlt(_localctx, 1); { - State = 426; + State = 429; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 423; + State = 426; Match(WS); } } - State = 428; + State = 431; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 429; + State = 432; Match(DOLLAR); - State = 431; + State = 434; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,52,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,54,Context) ) { case 1: { - State = 430; + State = 433; entityName(); } break; } - State = 434; + State = 437; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,53,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,55,Context) ) { case 1: { - State = 433; + State = 436; Match(COLON_MARK); } break; } - State = 437; + State = 440; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,54,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,56,Context) ) { case 1: { - State = 436; + State = 439; entityType(); } break; @@ -2901,7 +2919,7 @@ public EntityNameContext entityName() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 440; + State = 443; ErrorHandler.Sync(this); _alt = 1; do { @@ -2909,7 +2927,7 @@ public EntityNameContext entityName() { case 1: { { - State = 439; + State = 442; _la = TokenStream.LA(1); if ( !(_la==WS || _la==ENTITY_TEXT) ) { ErrorHandler.RecoverInline(this); @@ -2924,9 +2942,9 @@ public EntityNameContext entityName() { default: throw new NoViableAltException(this); } - State = 442; + State = 445; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,55,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,57,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -2997,43 +3015,43 @@ public EntityTypeContext entityType() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 449; + State = 452; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 449; + State = 452; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case COMPOSITE_ENTITY: { - State = 444; + State = 447; compositeEntityIdentifier(); } break; case REGEX_ENTITY: { - State = 445; + State = 448; regexEntityIdentifier(); } break; case ENTITY_TEXT: { - State = 446; + State = 449; Match(ENTITY_TEXT); } break; case COLON_MARK: { - State = 447; + State = 450; Match(COLON_MARK); } break; case WS: { - State = 448; + State = 451; Match(WS); } break; @@ -3045,9 +3063,9 @@ public EntityTypeContext entityType() { default: throw new NoViableAltException(this); } - State = 451; + State = 454; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,57,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,59,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -3094,7 +3112,7 @@ public CompositeEntityIdentifierContext compositeEntityIdentifier() { try { EnterOuterAlt(_localctx, 1); { - State = 453; + State = 456; Match(COMPOSITE_ENTITY); } } @@ -3141,7 +3159,7 @@ public RegexEntityIdentifierContext regexEntityIdentifier() { try { EnterOuterAlt(_localctx, 1); { - State = 455; + State = 458; Match(REGEX_ENTITY); } } @@ -3206,29 +3224,29 @@ public EntityListBodyContext entityListBody() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 461; + State = 464; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 461; + State = 464; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,58,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,60,Context) ) { case 1: { { - State = 457; + State = 460; normalItemString(); - State = 458; + State = 461; newline(); } } break; case 2: { - State = 460; + State = 463; errorString(); } break; @@ -3238,9 +3256,9 @@ public EntityListBodyContext entityListBody() { default: throw new NoViableAltException(this); } - State = 463; + State = 466; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,59,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,61,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -3305,30 +3323,30 @@ public NormalItemStringContext normalItemString() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 468; + State = 471; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 465; + State = 468; Match(WS); } } - State = 470; + State = 473; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 471; + State = 474; Match(DASH); - State = 475; + State = 478; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,61,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 472; + State = 475; _la = TokenStream.LA(1); if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 15032385538L) != 0) ) { ErrorHandler.RecoverInline(this); @@ -3340,9 +3358,9 @@ public NormalItemStringContext normalItemString() { } } } - State = 477; + State = 480; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,61,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); } } } @@ -3391,7 +3409,7 @@ public ImportSectionContext importSection() { try { EnterOuterAlt(_localctx, 1); { - State = 478; + State = 481; importDefinition(); } } @@ -3444,37 +3462,37 @@ public ImportDefinitionContext importDefinition() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 483; + State = 486; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 480; + State = 483; Match(WS); } } - State = 485; + State = 488; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 486; + State = 489; Match(IMPORT); - State = 490; + State = 493; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,65,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 487; + State = 490; Match(WS); } } } - State = 492; + State = 495; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,65,Context); } } } @@ -3523,7 +3541,7 @@ public ReferenceSectionContext referenceSection() { try { EnterOuterAlt(_localctx, 1); { - State = 493; + State = 496; referenceDefinition(); } } @@ -3576,37 +3594,37 @@ public ReferenceDefinitionContext referenceDefinition() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 498; + State = 501; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 495; + State = 498; Match(WS); } } - State = 500; + State = 503; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 501; + State = 504; Match(REFERENCE); - State = 505; + State = 508; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,65,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,67,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 502; + State = 505; Match(WS); } } } - State = 507; + State = 510; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,65,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,67,Context); } } } @@ -3655,7 +3673,7 @@ public QnaSectionContext qnaSection() { try { EnterOuterAlt(_localctx, 1); { - State = 508; + State = 511; qnaDefinition(); } } @@ -3719,38 +3737,38 @@ public QnaDefinitionContext qnaDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 511; + State = 514; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,66,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,68,Context) ) { case 1: { - State = 510; + State = 513; qnaSourceInfo(); } break; } - State = 514; + State = 517; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,67,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,69,Context) ) { case 1: { - State = 513; + State = 516; qnaIdMark(); } break; } - State = 516; + State = 519; qnaQuestion(); - State = 517; + State = 520; moreQuestionsBody(); - State = 518; + State = 521; qnaAnswerBody(); - State = 520; + State = 523; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,68,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,70,Context) ) { case 1: { - State = 519; + State = 522; promptSection(); } break; @@ -3805,21 +3823,21 @@ public QnaSourceInfoContext qnaSourceInfo() { try { EnterOuterAlt(_localctx, 1); { - State = 525; + State = 528; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 522; + State = 525; Match(WS); } } - State = 527; + State = 530; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 528; + State = 531; Match(QNA_SOURCE_INFO); } } @@ -3871,21 +3889,21 @@ public QnaIdMarkContext qnaIdMark() { try { EnterOuterAlt(_localctx, 1); { - State = 533; + State = 536; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 530; + State = 533; Match(WS); } } - State = 535; + State = 538; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 536; + State = 539; Match(QNA_ID_MARK); } } @@ -3940,23 +3958,23 @@ public QnaQuestionContext qnaQuestion() { try { EnterOuterAlt(_localctx, 1); { - State = 541; + State = 544; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 538; + State = 541; Match(WS); } } - State = 543; + State = 546; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 544; + State = 547; Match(QNA); - State = 545; + State = 548; questionText(); } } @@ -4007,17 +4025,17 @@ public QuestionTextContext questionText() { try { EnterOuterAlt(_localctx, 1); { - State = 550; + State = 553; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==QNA_TEXT) { { { - State = 547; + State = 550; Match(QNA_TEXT); } } - State = 552; + State = 555; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -4088,37 +4106,37 @@ public MoreQuestionsBodyContext moreQuestionsBody() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 556; + State = 559; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,73,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 553; + State = 556; Match(WS); } } } - State = 558; + State = 561; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,73,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); } - State = 565; + State = 568; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,77,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 563; + State = 566; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case DASH: { { - State = 559; + State = 562; moreQuestion(); - State = 560; + State = 563; newline(); } } @@ -4126,7 +4144,7 @@ public MoreQuestionsBodyContext moreQuestionsBody() { case WS: case INVALID_TOKEN_DEFAULT_MODE: { - State = 562; + State = 565; errorQuestionString(); } break; @@ -4135,9 +4153,9 @@ public MoreQuestionsBodyContext moreQuestionsBody() { } } } - State = 567; + State = 570; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,77,Context); } } } @@ -4194,16 +4212,16 @@ public MoreQuestionContext moreQuestion() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 568; + State = 571; Match(DASH); - State = 572; + State = 575; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,76,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,78,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 569; + State = 572; _la = TokenStream.LA(1); if ( !(_la==WS || _la==TEXT) ) { ErrorHandler.RecoverInline(this); @@ -4215,9 +4233,9 @@ public MoreQuestionContext moreQuestion() { } } } - State = 574; + State = 577; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,76,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,78,Context); } } } @@ -4273,7 +4291,7 @@ public ErrorQuestionStringContext errorQuestionString() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 576; + State = 579; ErrorHandler.Sync(this); _alt = 1; do { @@ -4281,7 +4299,7 @@ public ErrorQuestionStringContext errorQuestionString() { case 1: { { - State = 575; + State = 578; _la = TokenStream.LA(1); if ( !(_la==WS || _la==INVALID_TOKEN_DEFAULT_MODE) ) { ErrorHandler.RecoverInline(this); @@ -4296,9 +4314,9 @@ public ErrorQuestionStringContext errorQuestionString() { default: throw new NoViableAltException(this); } - State = 578; + State = 581; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,77,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,79,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4350,23 +4368,23 @@ public QnaAnswerBodyContext qnaAnswerBody() { try { EnterOuterAlt(_localctx, 1); { - State = 588; + State = 591; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,80,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,82,Context) ) { case 1: { { - State = 581; + State = 584; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,78,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,80,Context) ) { case 1: { - State = 580; + State = 583; filterSection(); } break; } - State = 583; + State = 586; multiLineAnswer(); } } @@ -4374,14 +4392,14 @@ public QnaAnswerBodyContext qnaAnswerBody() { case 2: { { - State = 584; + State = 587; multiLineAnswer(); - State = 586; + State = 589; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,79,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,81,Context) ) { case 1: { - State = 585; + State = 588; filterSection(); } break; @@ -4453,41 +4471,41 @@ public FilterSectionContext filterSection() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 593; + State = 596; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 590; + State = 593; Match(WS); } } - State = 595; + State = 598; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 596; - Match(FILTER_MARK); State = 599; + Match(FILTER_MARK); + State = 602; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 599; + State = 602; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,82,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,84,Context) ) { case 1: { - State = 597; + State = 600; filterLine(); } break; case 2: { - State = 598; + State = 601; errorFilterLine(); } break; @@ -4497,9 +4515,9 @@ public FilterSectionContext filterSection() { default: throw new NoViableAltException(this); } - State = 601; + State = 604; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,83,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,85,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4564,41 +4582,41 @@ public PromptSectionContext promptSection() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 606; + State = 609; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 603; + State = 606; Match(WS); } } - State = 608; + State = 611; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 609; - Match(PROMPT_MARK); State = 612; + Match(PROMPT_MARK); + State = 615; ErrorHandler.Sync(this); _alt = 1; do { switch (_alt) { case 1: { - State = 612; + State = 615; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,85,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,87,Context) ) { case 1: { - State = 610; + State = 613; filterLine(); } break; case 2: { - State = 611; + State = 614; errorFilterLine(); } break; @@ -4608,9 +4626,9 @@ public PromptSectionContext promptSection() { default: throw new NoViableAltException(this); } - State = 614; + State = 617; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,86,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4670,30 +4688,30 @@ public FilterLineContext filterLine() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 619; + State = 622; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 616; + State = 619; Match(WS); } } - State = 621; + State = 624; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 622; + State = 625; Match(DASH); - State = 626; + State = 629; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,90,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 623; + State = 626; _la = TokenStream.LA(1); if ( !(_la==WS || _la==TEXT) ) { ErrorHandler.RecoverInline(this); @@ -4705,11 +4723,11 @@ public FilterLineContext filterLine() { } } } - State = 628; + State = 631; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,90,Context); } - State = 629; + State = 632; newline(); } } @@ -4765,7 +4783,7 @@ public ErrorFilterLineContext errorFilterLine() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 632; + State = 635; ErrorHandler.Sync(this); _alt = 1; do { @@ -4773,7 +4791,7 @@ public ErrorFilterLineContext errorFilterLine() { case 1: { { - State = 631; + State = 634; _la = TokenStream.LA(1); if ( !(_la==WS || _la==INVALID_TOKEN_DEFAULT_MODE) ) { ErrorHandler.RecoverInline(this); @@ -4788,9 +4806,9 @@ public ErrorFilterLineContext errorFilterLine() { default: throw new NoViableAltException(this); } - State = 634; + State = 637; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,89,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,91,Context); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); } } @@ -4842,21 +4860,21 @@ public MultiLineAnswerContext multiLineAnswer() { try { EnterOuterAlt(_localctx, 1); { - State = 639; + State = 642; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 636; + State = 639; Match(WS); } } - State = 641; + State = 644; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 642; + State = 645; Match(MULTI_LINE_TEXT); } } @@ -4905,7 +4923,7 @@ public ModelInfoSectionContext modelInfoSection() { try { EnterOuterAlt(_localctx, 1); { - State = 644; + State = 647; modelInfoDefinition(); } } @@ -4957,21 +4975,21 @@ public ModelInfoDefinitionContext modelInfoDefinition() { try { EnterOuterAlt(_localctx, 1); { - State = 649; + State = 652; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==WS) { { { - State = 646; + State = 649; Match(WS); } } - State = 651; + State = 654; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 652; + State = 655; Match(MODEL_INFO); } } @@ -4987,7 +5005,7 @@ public ModelInfoDefinitionContext modelInfoDefinition() { } private static int[] _serializedATN = { - 4,1,40,655,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7, + 4,1,40,658,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7, 7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14, 2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21, 2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7,28, @@ -4995,221 +5013,222 @@ public ModelInfoDefinitionContext modelInfoDefinition() { 2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42, 2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49, 2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56, - 2,57,7,57,2,58,7,58,2,59,7,59,1,0,4,0,122,8,0,11,0,12,0,123,1,0,1,0,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,138,8,1,1,2,5,2,141,8,2,10,2, - 12,2,144,9,2,1,2,1,2,1,3,1,3,3,3,150,8,3,1,4,4,4,153,8,4,11,4,12,4,154, - 1,5,1,5,1,5,1,6,5,6,161,8,6,10,6,12,6,164,9,6,1,6,1,6,5,6,168,8,6,10,6, - 12,6,171,9,6,1,6,1,6,1,7,1,7,1,7,5,7,178,8,7,10,7,12,7,181,9,7,1,8,1,8, - 1,8,5,8,186,8,8,10,8,12,8,189,9,8,1,9,4,9,192,8,9,11,9,12,9,193,1,10,5, - 10,197,8,10,10,10,12,10,200,9,10,1,10,1,10,1,10,1,11,1,11,1,12,1,12,3, - 12,209,8,12,1,13,5,13,212,8,13,10,13,12,13,215,9,13,1,13,1,13,3,13,219, - 8,13,1,13,5,13,222,8,13,10,13,12,13,225,9,13,1,13,1,13,1,14,1,14,1,14, - 5,14,232,8,14,10,14,12,14,235,9,14,1,15,5,15,238,8,15,10,15,12,15,241, - 9,15,1,15,1,15,1,16,5,16,246,8,16,10,16,12,16,249,9,16,1,16,1,16,1,16, - 1,16,1,16,4,16,256,8,16,11,16,12,16,257,1,17,5,17,261,8,17,10,17,12,17, - 264,9,17,1,17,1,17,5,17,268,8,17,10,17,12,17,271,9,17,1,18,1,18,1,19,1, - 19,3,19,277,8,19,1,20,1,20,1,20,1,20,4,20,283,8,20,11,20,12,20,284,1,21, - 5,21,288,8,21,10,21,12,21,291,9,21,1,21,1,21,5,21,295,8,21,10,21,12,21, - 298,9,21,1,21,3,21,301,8,21,1,21,5,21,304,8,21,10,21,12,21,307,9,21,1, - 21,1,21,3,21,311,8,21,1,21,5,21,314,8,21,10,21,12,21,317,9,21,1,21,3,21, - 320,8,21,1,21,5,21,323,8,21,10,21,12,21,326,9,21,1,21,3,21,329,8,21,1, - 21,5,21,332,8,21,10,21,12,21,335,9,21,1,21,3,21,338,8,21,1,21,5,21,341, - 8,21,10,21,12,21,344,9,21,1,21,1,21,3,21,348,8,21,1,21,1,21,1,22,1,22, - 1,23,1,23,1,24,1,24,1,25,3,25,359,8,25,1,25,5,25,362,8,25,10,25,12,25, - 365,9,25,1,25,1,25,1,26,1,26,5,26,371,8,26,10,26,12,26,374,9,26,1,26,1, - 26,1,27,1,27,5,27,380,8,27,10,27,12,27,383,9,27,1,27,1,27,5,27,387,8,27, - 10,27,12,27,390,9,27,1,27,5,27,393,8,27,10,27,12,27,396,9,27,1,28,1,28, - 5,28,400,8,28,10,28,12,28,403,9,28,1,28,3,28,406,8,28,1,29,1,29,5,29,410, - 8,29,10,29,12,29,413,9,29,1,29,3,29,416,8,29,1,30,1,30,1,31,1,31,3,31, - 422,8,31,1,32,5,32,425,8,32,10,32,12,32,428,9,32,1,32,1,32,3,32,432,8, - 32,1,32,3,32,435,8,32,1,32,3,32,438,8,32,1,33,4,33,441,8,33,11,33,12,33, - 442,1,34,1,34,1,34,1,34,1,34,4,34,450,8,34,11,34,12,34,451,1,35,1,35,1, - 36,1,36,1,37,1,37,1,37,1,37,4,37,462,8,37,11,37,12,37,463,1,38,5,38,467, - 8,38,10,38,12,38,470,9,38,1,38,1,38,5,38,474,8,38,10,38,12,38,477,9,38, - 1,39,1,39,1,40,5,40,482,8,40,10,40,12,40,485,9,40,1,40,1,40,5,40,489,8, - 40,10,40,12,40,492,9,40,1,41,1,41,1,42,5,42,497,8,42,10,42,12,42,500,9, - 42,1,42,1,42,5,42,504,8,42,10,42,12,42,507,9,42,1,43,1,43,1,44,3,44,512, - 8,44,1,44,3,44,515,8,44,1,44,1,44,1,44,1,44,3,44,521,8,44,1,45,5,45,524, - 8,45,10,45,12,45,527,9,45,1,45,1,45,1,46,5,46,532,8,46,10,46,12,46,535, - 9,46,1,46,1,46,1,47,5,47,540,8,47,10,47,12,47,543,9,47,1,47,1,47,1,47, - 1,48,5,48,549,8,48,10,48,12,48,552,9,48,1,49,5,49,555,8,49,10,49,12,49, - 558,9,49,1,49,1,49,1,49,1,49,5,49,564,8,49,10,49,12,49,567,9,49,1,50,1, - 50,5,50,571,8,50,10,50,12,50,574,9,50,1,51,4,51,577,8,51,11,51,12,51,578, - 1,52,3,52,582,8,52,1,52,1,52,1,52,3,52,587,8,52,3,52,589,8,52,1,53,5,53, - 592,8,53,10,53,12,53,595,9,53,1,53,1,53,1,53,4,53,600,8,53,11,53,12,53, - 601,1,54,5,54,605,8,54,10,54,12,54,608,9,54,1,54,1,54,1,54,4,54,613,8, - 54,11,54,12,54,614,1,55,5,55,618,8,55,10,55,12,55,621,9,55,1,55,1,55,5, - 55,625,8,55,10,55,12,55,628,9,55,1,55,1,55,1,56,4,56,633,8,56,11,56,12, - 56,634,1,57,5,57,638,8,57,10,57,12,57,641,9,57,1,57,1,57,1,58,1,58,1,59, - 5,59,648,8,59,10,59,12,59,651,9,59,1,59,1,59,1,59,1,123,0,60,0,2,4,6,8, - 10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56, - 58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102, - 104,106,108,110,112,114,116,118,0,6,1,1,2,2,2,0,1,1,17,17,2,0,1,1,31,33, - 1,0,26,27,2,0,1,1,37,37,2,0,1,1,33,33,700,0,121,1,0,0,0,2,137,1,0,0,0, - 4,142,1,0,0,0,6,147,1,0,0,0,8,152,1,0,0,0,10,156,1,0,0,0,12,162,1,0,0, - 0,14,174,1,0,0,0,16,182,1,0,0,0,18,191,1,0,0,0,20,198,1,0,0,0,22,204,1, - 0,0,0,24,206,1,0,0,0,26,213,1,0,0,0,28,228,1,0,0,0,30,239,1,0,0,0,32,247, - 1,0,0,0,34,262,1,0,0,0,36,272,1,0,0,0,38,274,1,0,0,0,40,282,1,0,0,0,42, - 289,1,0,0,0,44,351,1,0,0,0,46,353,1,0,0,0,48,355,1,0,0,0,50,358,1,0,0, - 0,52,368,1,0,0,0,54,377,1,0,0,0,56,397,1,0,0,0,58,407,1,0,0,0,60,417,1, - 0,0,0,62,419,1,0,0,0,64,426,1,0,0,0,66,440,1,0,0,0,68,449,1,0,0,0,70,453, - 1,0,0,0,72,455,1,0,0,0,74,461,1,0,0,0,76,468,1,0,0,0,78,478,1,0,0,0,80, - 483,1,0,0,0,82,493,1,0,0,0,84,498,1,0,0,0,86,508,1,0,0,0,88,511,1,0,0, - 0,90,525,1,0,0,0,92,533,1,0,0,0,94,541,1,0,0,0,96,550,1,0,0,0,98,556,1, - 0,0,0,100,568,1,0,0,0,102,576,1,0,0,0,104,588,1,0,0,0,106,593,1,0,0,0, - 108,606,1,0,0,0,110,619,1,0,0,0,112,632,1,0,0,0,114,639,1,0,0,0,116,644, - 1,0,0,0,118,649,1,0,0,0,120,122,3,2,1,0,121,120,1,0,0,0,122,123,1,0,0, - 0,123,124,1,0,0,0,123,121,1,0,0,0,124,125,1,0,0,0,125,126,5,0,0,1,126, - 1,1,0,0,0,127,138,5,2,0,0,128,138,3,10,5,0,129,138,3,22,11,0,130,138,3, - 60,30,0,131,138,3,36,18,0,132,138,3,78,39,0,133,138,3,82,41,0,134,138, - 3,86,43,0,135,138,3,116,58,0,136,138,3,6,3,0,137,127,1,0,0,0,137,128,1, - 0,0,0,137,129,1,0,0,0,137,130,1,0,0,0,137,131,1,0,0,0,137,132,1,0,0,0, - 137,133,1,0,0,0,137,134,1,0,0,0,137,135,1,0,0,0,137,136,1,0,0,0,138,3, - 1,0,0,0,139,141,5,1,0,0,140,139,1,0,0,0,141,144,1,0,0,0,142,140,1,0,0, - 0,142,143,1,0,0,0,143,145,1,0,0,0,144,142,1,0,0,0,145,146,7,0,0,0,146, - 5,1,0,0,0,147,149,5,5,0,0,148,150,5,2,0,0,149,148,1,0,0,0,149,150,1,0, - 0,0,150,7,1,0,0,0,151,153,7,1,0,0,152,151,1,0,0,0,153,154,1,0,0,0,154, - 152,1,0,0,0,154,155,1,0,0,0,155,9,1,0,0,0,156,157,3,12,6,0,157,158,3,18, - 9,0,158,11,1,0,0,0,159,161,5,1,0,0,160,159,1,0,0,0,161,164,1,0,0,0,162, - 160,1,0,0,0,162,163,1,0,0,0,163,165,1,0,0,0,164,162,1,0,0,0,165,169,5, - 7,0,0,166,168,5,1,0,0,167,166,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0, - 169,170,1,0,0,0,170,172,1,0,0,0,171,169,1,0,0,0,172,173,3,14,7,0,173,13, - 1,0,0,0,174,179,3,16,8,0,175,178,5,1,0,0,176,178,3,16,8,0,177,175,1,0, - 0,0,177,176,1,0,0,0,178,181,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180, - 15,1,0,0,0,181,179,1,0,0,0,182,187,5,29,0,0,183,184,5,30,0,0,184,186,5, - 29,0,0,185,183,1,0,0,0,186,189,1,0,0,0,187,185,1,0,0,0,187,188,1,0,0,0, - 188,17,1,0,0,0,189,187,1,0,0,0,190,192,3,20,10,0,191,190,1,0,0,0,192,193, - 1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194,19,1,0,0,0,195,197,5,1,0,0, - 196,195,1,0,0,0,197,200,1,0,0,0,198,196,1,0,0,0,198,199,1,0,0,0,199,201, - 1,0,0,0,200,198,1,0,0,0,201,202,5,7,0,0,202,203,3,22,11,0,203,21,1,0,0, - 0,204,205,3,24,12,0,205,23,1,0,0,0,206,208,3,26,13,0,207,209,3,30,15,0, - 208,207,1,0,0,0,208,209,1,0,0,0,209,25,1,0,0,0,210,212,5,1,0,0,211,210, - 1,0,0,0,212,215,1,0,0,0,213,211,1,0,0,0,213,214,1,0,0,0,214,216,1,0,0, - 0,215,213,1,0,0,0,216,218,5,7,0,0,217,219,5,7,0,0,218,217,1,0,0,0,218, - 219,1,0,0,0,219,223,1,0,0,0,220,222,5,1,0,0,221,220,1,0,0,0,222,225,1, - 0,0,0,223,221,1,0,0,0,223,224,1,0,0,0,224,226,1,0,0,0,225,223,1,0,0,0, - 226,227,3,28,14,0,227,27,1,0,0,0,228,233,3,16,8,0,229,232,5,1,0,0,230, - 232,3,16,8,0,231,229,1,0,0,0,231,230,1,0,0,0,232,235,1,0,0,0,233,231,1, - 0,0,0,233,234,1,0,0,0,234,29,1,0,0,0,235,233,1,0,0,0,236,238,5,1,0,0,237, - 236,1,0,0,0,238,241,1,0,0,0,239,237,1,0,0,0,239,240,1,0,0,0,240,242,1, - 0,0,0,241,239,1,0,0,0,242,243,3,32,16,0,243,31,1,0,0,0,244,246,5,1,0,0, - 245,244,1,0,0,0,246,249,1,0,0,0,247,245,1,0,0,0,247,248,1,0,0,0,248,255, - 1,0,0,0,249,247,1,0,0,0,250,251,3,34,17,0,251,252,3,4,2,0,252,256,1,0, - 0,0,253,256,3,8,4,0,254,256,3,6,3,0,255,250,1,0,0,0,255,253,1,0,0,0,255, - 254,1,0,0,0,256,257,1,0,0,0,257,255,1,0,0,0,257,258,1,0,0,0,258,33,1,0, - 0,0,259,261,5,1,0,0,260,259,1,0,0,0,261,264,1,0,0,0,262,260,1,0,0,0,262, - 263,1,0,0,0,263,265,1,0,0,0,264,262,1,0,0,0,265,269,5,8,0,0,266,268,7, - 2,0,0,267,266,1,0,0,0,268,271,1,0,0,0,269,267,1,0,0,0,269,270,1,0,0,0, - 270,35,1,0,0,0,271,269,1,0,0,0,272,273,3,38,19,0,273,37,1,0,0,0,274,276, - 3,42,21,0,275,277,3,40,20,0,276,275,1,0,0,0,276,277,1,0,0,0,277,39,1,0, - 0,0,278,279,3,76,38,0,279,280,3,4,2,0,280,283,1,0,0,0,281,283,3,8,4,0, - 282,278,1,0,0,0,282,281,1,0,0,0,283,284,1,0,0,0,284,282,1,0,0,0,284,285, - 1,0,0,0,285,41,1,0,0,0,286,288,5,1,0,0,287,286,1,0,0,0,288,291,1,0,0,0, - 289,287,1,0,0,0,289,290,1,0,0,0,290,292,1,0,0,0,291,289,1,0,0,0,292,296, - 5,10,0,0,293,295,5,1,0,0,294,293,1,0,0,0,295,298,1,0,0,0,296,294,1,0,0, - 0,296,297,1,0,0,0,297,300,1,0,0,0,298,296,1,0,0,0,299,301,3,48,24,0,300, - 299,1,0,0,0,300,301,1,0,0,0,301,305,1,0,0,0,302,304,5,1,0,0,303,302,1, - 0,0,0,304,307,1,0,0,0,305,303,1,0,0,0,305,306,1,0,0,0,306,310,1,0,0,0, - 307,305,1,0,0,0,308,311,3,56,28,0,309,311,3,58,29,0,310,308,1,0,0,0,310, - 309,1,0,0,0,310,311,1,0,0,0,311,315,1,0,0,0,312,314,5,1,0,0,313,312,1, - 0,0,0,314,317,1,0,0,0,315,313,1,0,0,0,315,316,1,0,0,0,316,319,1,0,0,0, - 317,315,1,0,0,0,318,320,3,50,25,0,319,318,1,0,0,0,319,320,1,0,0,0,320, - 324,1,0,0,0,321,323,5,1,0,0,322,321,1,0,0,0,323,326,1,0,0,0,324,322,1, - 0,0,0,324,325,1,0,0,0,325,328,1,0,0,0,326,324,1,0,0,0,327,329,3,52,26, - 0,328,327,1,0,0,0,328,329,1,0,0,0,329,333,1,0,0,0,330,332,5,1,0,0,331, - 330,1,0,0,0,332,335,1,0,0,0,333,331,1,0,0,0,333,334,1,0,0,0,334,337,1, - 0,0,0,335,333,1,0,0,0,336,338,5,18,0,0,337,336,1,0,0,0,337,338,1,0,0,0, - 338,342,1,0,0,0,339,341,5,1,0,0,340,339,1,0,0,0,341,344,1,0,0,0,342,340, - 1,0,0,0,342,343,1,0,0,0,343,347,1,0,0,0,344,342,1,0,0,0,345,348,3,44,22, - 0,346,348,3,46,23,0,347,345,1,0,0,0,347,346,1,0,0,0,347,348,1,0,0,0,348, - 349,1,0,0,0,349,350,3,4,2,0,350,43,1,0,0,0,351,352,5,24,0,0,352,45,1,0, - 0,0,353,354,5,25,0,0,354,47,1,0,0,0,355,356,5,22,0,0,356,49,1,0,0,0,357, - 359,5,20,0,0,358,357,1,0,0,0,358,359,1,0,0,0,359,363,1,0,0,0,360,362,5, - 1,0,0,361,360,1,0,0,0,362,365,1,0,0,0,363,361,1,0,0,0,363,364,1,0,0,0, - 364,366,1,0,0,0,365,363,1,0,0,0,366,367,3,54,27,0,367,51,1,0,0,0,368,372, - 5,21,0,0,369,371,5,1,0,0,370,369,1,0,0,0,371,374,1,0,0,0,372,370,1,0,0, - 0,372,373,1,0,0,0,373,375,1,0,0,0,374,372,1,0,0,0,375,376,3,54,27,0,376, - 53,1,0,0,0,377,394,7,3,0,0,378,380,5,1,0,0,379,378,1,0,0,0,380,383,1,0, - 0,0,381,379,1,0,0,0,381,382,1,0,0,0,382,384,1,0,0,0,383,381,1,0,0,0,384, - 388,5,19,0,0,385,387,5,1,0,0,386,385,1,0,0,0,387,390,1,0,0,0,388,386,1, - 0,0,0,388,389,1,0,0,0,389,391,1,0,0,0,390,388,1,0,0,0,391,393,7,3,0,0, - 392,381,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,55, - 1,0,0,0,396,394,1,0,0,0,397,405,5,26,0,0,398,400,5,1,0,0,399,398,1,0,0, - 0,400,403,1,0,0,0,401,399,1,0,0,0,401,402,1,0,0,0,402,404,1,0,0,0,403, - 401,1,0,0,0,404,406,5,23,0,0,405,401,1,0,0,0,405,406,1,0,0,0,406,57,1, - 0,0,0,407,415,5,27,0,0,408,410,5,1,0,0,409,408,1,0,0,0,410,413,1,0,0,0, - 411,409,1,0,0,0,411,412,1,0,0,0,412,414,1,0,0,0,413,411,1,0,0,0,414,416, - 5,23,0,0,415,411,1,0,0,0,415,416,1,0,0,0,416,59,1,0,0,0,417,418,3,62,31, - 0,418,61,1,0,0,0,419,421,3,64,32,0,420,422,3,74,37,0,421,420,1,0,0,0,421, - 422,1,0,0,0,422,63,1,0,0,0,423,425,5,1,0,0,424,423,1,0,0,0,425,428,1,0, - 0,0,426,424,1,0,0,0,426,427,1,0,0,0,427,429,1,0,0,0,428,426,1,0,0,0,429, - 431,5,9,0,0,430,432,3,66,33,0,431,430,1,0,0,0,431,432,1,0,0,0,432,434, - 1,0,0,0,433,435,5,38,0,0,434,433,1,0,0,0,434,435,1,0,0,0,435,437,1,0,0, - 0,436,438,3,68,34,0,437,436,1,0,0,0,437,438,1,0,0,0,438,65,1,0,0,0,439, - 441,7,4,0,0,440,439,1,0,0,0,441,442,1,0,0,0,442,440,1,0,0,0,442,443,1, - 0,0,0,443,67,1,0,0,0,444,450,3,70,35,0,445,450,3,72,36,0,446,450,5,37, - 0,0,447,450,5,38,0,0,448,450,5,1,0,0,449,444,1,0,0,0,449,445,1,0,0,0,449, - 446,1,0,0,0,449,447,1,0,0,0,449,448,1,0,0,0,450,451,1,0,0,0,451,449,1, - 0,0,0,451,452,1,0,0,0,452,69,1,0,0,0,453,454,5,35,0,0,454,71,1,0,0,0,455, - 456,5,36,0,0,456,73,1,0,0,0,457,458,3,76,38,0,458,459,3,4,2,0,459,462, - 1,0,0,0,460,462,3,8,4,0,461,457,1,0,0,0,461,460,1,0,0,0,462,463,1,0,0, - 0,463,461,1,0,0,0,463,464,1,0,0,0,464,75,1,0,0,0,465,467,5,1,0,0,466,465, - 1,0,0,0,467,470,1,0,0,0,468,466,1,0,0,0,468,469,1,0,0,0,469,471,1,0,0, - 0,470,468,1,0,0,0,471,475,5,8,0,0,472,474,7,2,0,0,473,472,1,0,0,0,474, - 477,1,0,0,0,475,473,1,0,0,0,475,476,1,0,0,0,476,77,1,0,0,0,477,475,1,0, - 0,0,478,479,3,80,40,0,479,79,1,0,0,0,480,482,5,1,0,0,481,480,1,0,0,0,482, - 485,1,0,0,0,483,481,1,0,0,0,483,484,1,0,0,0,484,486,1,0,0,0,485,483,1, - 0,0,0,486,490,5,11,0,0,487,489,5,1,0,0,488,487,1,0,0,0,489,492,1,0,0,0, - 490,488,1,0,0,0,490,491,1,0,0,0,491,81,1,0,0,0,492,490,1,0,0,0,493,494, - 3,84,42,0,494,83,1,0,0,0,495,497,5,1,0,0,496,495,1,0,0,0,497,500,1,0,0, - 0,498,496,1,0,0,0,498,499,1,0,0,0,499,501,1,0,0,0,500,498,1,0,0,0,501, - 505,5,12,0,0,502,504,5,1,0,0,503,502,1,0,0,0,504,507,1,0,0,0,505,503,1, - 0,0,0,505,506,1,0,0,0,506,85,1,0,0,0,507,505,1,0,0,0,508,509,3,88,44,0, - 509,87,1,0,0,0,510,512,3,90,45,0,511,510,1,0,0,0,511,512,1,0,0,0,512,514, - 1,0,0,0,513,515,3,92,46,0,514,513,1,0,0,0,514,515,1,0,0,0,515,516,1,0, - 0,0,516,517,3,94,47,0,517,518,3,98,49,0,518,520,3,104,52,0,519,521,3,108, - 54,0,520,519,1,0,0,0,520,521,1,0,0,0,521,89,1,0,0,0,522,524,5,1,0,0,523, - 522,1,0,0,0,524,527,1,0,0,0,525,523,1,0,0,0,525,526,1,0,0,0,526,528,1, - 0,0,0,527,525,1,0,0,0,528,529,5,3,0,0,529,91,1,0,0,0,530,532,5,1,0,0,531, - 530,1,0,0,0,532,535,1,0,0,0,533,531,1,0,0,0,533,534,1,0,0,0,534,536,1, - 0,0,0,535,533,1,0,0,0,536,537,5,14,0,0,537,93,1,0,0,0,538,540,5,1,0,0, - 539,538,1,0,0,0,540,543,1,0,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,544, - 1,0,0,0,543,541,1,0,0,0,544,545,5,6,0,0,545,546,3,96,48,0,546,95,1,0,0, - 0,547,549,5,40,0,0,548,547,1,0,0,0,549,552,1,0,0,0,550,548,1,0,0,0,550, - 551,1,0,0,0,551,97,1,0,0,0,552,550,1,0,0,0,553,555,5,1,0,0,554,553,1,0, - 0,0,555,558,1,0,0,0,556,554,1,0,0,0,556,557,1,0,0,0,557,565,1,0,0,0,558, - 556,1,0,0,0,559,560,3,100,50,0,560,561,3,4,2,0,561,564,1,0,0,0,562,564, - 3,102,51,0,563,559,1,0,0,0,563,562,1,0,0,0,564,567,1,0,0,0,565,563,1,0, - 0,0,565,566,1,0,0,0,566,99,1,0,0,0,567,565,1,0,0,0,568,572,5,8,0,0,569, - 571,7,5,0,0,570,569,1,0,0,0,571,574,1,0,0,0,572,570,1,0,0,0,572,573,1, - 0,0,0,573,101,1,0,0,0,574,572,1,0,0,0,575,577,7,1,0,0,576,575,1,0,0,0, - 577,578,1,0,0,0,578,576,1,0,0,0,578,579,1,0,0,0,579,103,1,0,0,0,580,582, - 3,106,53,0,581,580,1,0,0,0,581,582,1,0,0,0,582,583,1,0,0,0,583,589,3,114, - 57,0,584,586,3,114,57,0,585,587,3,106,53,0,586,585,1,0,0,0,586,587,1,0, - 0,0,587,589,1,0,0,0,588,581,1,0,0,0,588,584,1,0,0,0,589,105,1,0,0,0,590, - 592,5,1,0,0,591,590,1,0,0,0,592,595,1,0,0,0,593,591,1,0,0,0,593,594,1, - 0,0,0,594,596,1,0,0,0,595,593,1,0,0,0,596,599,5,13,0,0,597,600,3,110,55, - 0,598,600,3,112,56,0,599,597,1,0,0,0,599,598,1,0,0,0,600,601,1,0,0,0,601, - 599,1,0,0,0,601,602,1,0,0,0,602,107,1,0,0,0,603,605,5,1,0,0,604,603,1, - 0,0,0,605,608,1,0,0,0,606,604,1,0,0,0,606,607,1,0,0,0,607,609,1,0,0,0, - 608,606,1,0,0,0,609,612,5,16,0,0,610,613,3,110,55,0,611,613,3,112,56,0, - 612,610,1,0,0,0,612,611,1,0,0,0,613,614,1,0,0,0,614,612,1,0,0,0,614,615, - 1,0,0,0,615,109,1,0,0,0,616,618,5,1,0,0,617,616,1,0,0,0,618,621,1,0,0, - 0,619,617,1,0,0,0,619,620,1,0,0,0,620,622,1,0,0,0,621,619,1,0,0,0,622, - 626,5,8,0,0,623,625,7,5,0,0,624,623,1,0,0,0,625,628,1,0,0,0,626,624,1, - 0,0,0,626,627,1,0,0,0,627,629,1,0,0,0,628,626,1,0,0,0,629,630,3,4,2,0, - 630,111,1,0,0,0,631,633,7,1,0,0,632,631,1,0,0,0,633,634,1,0,0,0,634,632, - 1,0,0,0,634,635,1,0,0,0,635,113,1,0,0,0,636,638,5,1,0,0,637,636,1,0,0, - 0,638,641,1,0,0,0,639,637,1,0,0,0,639,640,1,0,0,0,640,642,1,0,0,0,641, - 639,1,0,0,0,642,643,5,15,0,0,643,115,1,0,0,0,644,645,3,118,59,0,645,117, - 1,0,0,0,646,648,5,1,0,0,647,646,1,0,0,0,648,651,1,0,0,0,649,647,1,0,0, - 0,649,650,1,0,0,0,650,652,1,0,0,0,651,649,1,0,0,0,652,653,5,4,0,0,653, - 119,1,0,0,0,92,123,137,142,149,154,162,169,177,179,187,193,198,208,213, - 218,223,231,233,239,247,255,257,262,269,276,282,284,289,296,300,305,310, - 315,319,324,328,333,337,342,347,358,363,372,381,388,394,401,405,411,415, - 421,426,431,434,437,442,449,451,461,463,468,475,483,490,498,505,511,514, - 520,525,533,541,550,556,563,565,572,578,581,586,588,593,599,601,606,612, - 614,619,626,634,639,649 + 2,57,7,57,2,58,7,58,2,59,7,59,1,0,4,0,122,8,0,11,0,12,0,123,1,0,3,0,127, + 8,0,3,0,129,8,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,142,8, + 1,1,2,5,2,145,8,2,10,2,12,2,148,9,2,1,2,1,2,1,3,1,3,3,3,154,8,3,1,4,4, + 4,157,8,4,11,4,12,4,158,1,5,1,5,1,5,1,6,5,6,165,8,6,10,6,12,6,168,9,6, + 1,6,1,6,5,6,172,8,6,10,6,12,6,175,9,6,1,6,1,6,1,7,1,7,1,7,5,7,182,8,7, + 10,7,12,7,185,9,7,1,8,1,8,1,8,5,8,190,8,8,10,8,12,8,193,9,8,1,9,4,9,196, + 8,9,11,9,12,9,197,1,10,5,10,201,8,10,10,10,12,10,204,9,10,1,10,1,10,1, + 10,1,11,1,11,1,12,1,12,3,12,213,8,12,1,13,5,13,216,8,13,10,13,12,13,219, + 9,13,1,13,1,13,3,13,223,8,13,1,13,5,13,226,8,13,10,13,12,13,229,9,13,1, + 13,1,13,1,14,1,14,1,14,5,14,236,8,14,10,14,12,14,239,9,14,1,15,5,15,242, + 8,15,10,15,12,15,245,9,15,1,15,1,15,1,16,5,16,250,8,16,10,16,12,16,253, + 9,16,1,16,1,16,1,16,1,16,4,16,259,8,16,11,16,12,16,260,1,17,5,17,264,8, + 17,10,17,12,17,267,9,17,1,17,1,17,5,17,271,8,17,10,17,12,17,274,9,17,1, + 18,1,18,1,19,1,19,3,19,280,8,19,1,20,1,20,1,20,1,20,4,20,286,8,20,11,20, + 12,20,287,1,21,5,21,291,8,21,10,21,12,21,294,9,21,1,21,1,21,5,21,298,8, + 21,10,21,12,21,301,9,21,1,21,3,21,304,8,21,1,21,5,21,307,8,21,10,21,12, + 21,310,9,21,1,21,1,21,3,21,314,8,21,1,21,5,21,317,8,21,10,21,12,21,320, + 9,21,1,21,3,21,323,8,21,1,21,5,21,326,8,21,10,21,12,21,329,9,21,1,21,3, + 21,332,8,21,1,21,5,21,335,8,21,10,21,12,21,338,9,21,1,21,3,21,341,8,21, + 1,21,5,21,344,8,21,10,21,12,21,347,9,21,1,21,1,21,3,21,351,8,21,1,21,1, + 21,1,22,1,22,1,23,1,23,1,24,1,24,1,25,3,25,362,8,25,1,25,5,25,365,8,25, + 10,25,12,25,368,9,25,1,25,1,25,1,26,1,26,5,26,374,8,26,10,26,12,26,377, + 9,26,1,26,1,26,1,27,1,27,5,27,383,8,27,10,27,12,27,386,9,27,1,27,1,27, + 5,27,390,8,27,10,27,12,27,393,9,27,1,27,5,27,396,8,27,10,27,12,27,399, + 9,27,1,28,1,28,5,28,403,8,28,10,28,12,28,406,9,28,1,28,3,28,409,8,28,1, + 29,1,29,5,29,413,8,29,10,29,12,29,416,9,29,1,29,3,29,419,8,29,1,30,1,30, + 1,31,1,31,3,31,425,8,31,1,32,5,32,428,8,32,10,32,12,32,431,9,32,1,32,1, + 32,3,32,435,8,32,1,32,3,32,438,8,32,1,32,3,32,441,8,32,1,33,4,33,444,8, + 33,11,33,12,33,445,1,34,1,34,1,34,1,34,1,34,4,34,453,8,34,11,34,12,34, + 454,1,35,1,35,1,36,1,36,1,37,1,37,1,37,1,37,4,37,465,8,37,11,37,12,37, + 466,1,38,5,38,470,8,38,10,38,12,38,473,9,38,1,38,1,38,5,38,477,8,38,10, + 38,12,38,480,9,38,1,39,1,39,1,40,5,40,485,8,40,10,40,12,40,488,9,40,1, + 40,1,40,5,40,492,8,40,10,40,12,40,495,9,40,1,41,1,41,1,42,5,42,500,8,42, + 10,42,12,42,503,9,42,1,42,1,42,5,42,507,8,42,10,42,12,42,510,9,42,1,43, + 1,43,1,44,3,44,515,8,44,1,44,3,44,518,8,44,1,44,1,44,1,44,1,44,3,44,524, + 8,44,1,45,5,45,527,8,45,10,45,12,45,530,9,45,1,45,1,45,1,46,5,46,535,8, + 46,10,46,12,46,538,9,46,1,46,1,46,1,47,5,47,543,8,47,10,47,12,47,546,9, + 47,1,47,1,47,1,47,1,48,5,48,552,8,48,10,48,12,48,555,9,48,1,49,5,49,558, + 8,49,10,49,12,49,561,9,49,1,49,1,49,1,49,1,49,5,49,567,8,49,10,49,12,49, + 570,9,49,1,50,1,50,5,50,574,8,50,10,50,12,50,577,9,50,1,51,4,51,580,8, + 51,11,51,12,51,581,1,52,3,52,585,8,52,1,52,1,52,1,52,3,52,590,8,52,3,52, + 592,8,52,1,53,5,53,595,8,53,10,53,12,53,598,9,53,1,53,1,53,1,53,4,53,603, + 8,53,11,53,12,53,604,1,54,5,54,608,8,54,10,54,12,54,611,9,54,1,54,1,54, + 1,54,4,54,616,8,54,11,54,12,54,617,1,55,5,55,621,8,55,10,55,12,55,624, + 9,55,1,55,1,55,5,55,628,8,55,10,55,12,55,631,9,55,1,55,1,55,1,56,4,56, + 636,8,56,11,56,12,56,637,1,57,5,57,641,8,57,10,57,12,57,644,9,57,1,57, + 1,57,1,58,1,58,1,59,5,59,651,8,59,10,59,12,59,654,9,59,1,59,1,59,1,59, + 1,123,0,60,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42, + 44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90, + 92,94,96,98,100,102,104,106,108,110,112,114,116,118,0,6,1,1,2,2,2,0,1, + 1,17,17,2,0,1,1,31,33,1,0,26,27,2,0,1,1,37,37,2,0,1,1,33,33,703,0,128, + 1,0,0,0,2,141,1,0,0,0,4,146,1,0,0,0,6,151,1,0,0,0,8,156,1,0,0,0,10,160, + 1,0,0,0,12,166,1,0,0,0,14,178,1,0,0,0,16,186,1,0,0,0,18,195,1,0,0,0,20, + 202,1,0,0,0,22,208,1,0,0,0,24,210,1,0,0,0,26,217,1,0,0,0,28,232,1,0,0, + 0,30,243,1,0,0,0,32,251,1,0,0,0,34,265,1,0,0,0,36,275,1,0,0,0,38,277,1, + 0,0,0,40,285,1,0,0,0,42,292,1,0,0,0,44,354,1,0,0,0,46,356,1,0,0,0,48,358, + 1,0,0,0,50,361,1,0,0,0,52,371,1,0,0,0,54,380,1,0,0,0,56,400,1,0,0,0,58, + 410,1,0,0,0,60,420,1,0,0,0,62,422,1,0,0,0,64,429,1,0,0,0,66,443,1,0,0, + 0,68,452,1,0,0,0,70,456,1,0,0,0,72,458,1,0,0,0,74,464,1,0,0,0,76,471,1, + 0,0,0,78,481,1,0,0,0,80,486,1,0,0,0,82,496,1,0,0,0,84,501,1,0,0,0,86,511, + 1,0,0,0,88,514,1,0,0,0,90,528,1,0,0,0,92,536,1,0,0,0,94,544,1,0,0,0,96, + 553,1,0,0,0,98,559,1,0,0,0,100,571,1,0,0,0,102,579,1,0,0,0,104,591,1,0, + 0,0,106,596,1,0,0,0,108,609,1,0,0,0,110,622,1,0,0,0,112,635,1,0,0,0,114, + 642,1,0,0,0,116,647,1,0,0,0,118,652,1,0,0,0,120,122,3,2,1,0,121,120,1, + 0,0,0,122,123,1,0,0,0,123,124,1,0,0,0,123,121,1,0,0,0,124,129,1,0,0,0, + 125,127,3,6,3,0,126,125,1,0,0,0,126,127,1,0,0,0,127,129,1,0,0,0,128,121, + 1,0,0,0,128,126,1,0,0,0,129,130,1,0,0,0,130,131,5,0,0,1,131,1,1,0,0,0, + 132,142,5,2,0,0,133,142,3,10,5,0,134,142,3,22,11,0,135,142,3,60,30,0,136, + 142,3,36,18,0,137,142,3,78,39,0,138,142,3,82,41,0,139,142,3,86,43,0,140, + 142,3,116,58,0,141,132,1,0,0,0,141,133,1,0,0,0,141,134,1,0,0,0,141,135, + 1,0,0,0,141,136,1,0,0,0,141,137,1,0,0,0,141,138,1,0,0,0,141,139,1,0,0, + 0,141,140,1,0,0,0,142,3,1,0,0,0,143,145,5,1,0,0,144,143,1,0,0,0,145,148, + 1,0,0,0,146,144,1,0,0,0,146,147,1,0,0,0,147,149,1,0,0,0,148,146,1,0,0, + 0,149,150,7,0,0,0,150,5,1,0,0,0,151,153,5,5,0,0,152,154,5,2,0,0,153,152, + 1,0,0,0,153,154,1,0,0,0,154,7,1,0,0,0,155,157,7,1,0,0,156,155,1,0,0,0, + 157,158,1,0,0,0,158,156,1,0,0,0,158,159,1,0,0,0,159,9,1,0,0,0,160,161, + 3,12,6,0,161,162,3,18,9,0,162,11,1,0,0,0,163,165,5,1,0,0,164,163,1,0,0, + 0,165,168,1,0,0,0,166,164,1,0,0,0,166,167,1,0,0,0,167,169,1,0,0,0,168, + 166,1,0,0,0,169,173,5,7,0,0,170,172,5,1,0,0,171,170,1,0,0,0,172,175,1, + 0,0,0,173,171,1,0,0,0,173,174,1,0,0,0,174,176,1,0,0,0,175,173,1,0,0,0, + 176,177,3,14,7,0,177,13,1,0,0,0,178,183,3,16,8,0,179,182,5,1,0,0,180,182, + 3,16,8,0,181,179,1,0,0,0,181,180,1,0,0,0,182,185,1,0,0,0,183,181,1,0,0, + 0,183,184,1,0,0,0,184,15,1,0,0,0,185,183,1,0,0,0,186,191,5,29,0,0,187, + 188,5,30,0,0,188,190,5,29,0,0,189,187,1,0,0,0,190,193,1,0,0,0,191,189, + 1,0,0,0,191,192,1,0,0,0,192,17,1,0,0,0,193,191,1,0,0,0,194,196,3,20,10, + 0,195,194,1,0,0,0,196,197,1,0,0,0,197,195,1,0,0,0,197,198,1,0,0,0,198, + 19,1,0,0,0,199,201,5,1,0,0,200,199,1,0,0,0,201,204,1,0,0,0,202,200,1,0, + 0,0,202,203,1,0,0,0,203,205,1,0,0,0,204,202,1,0,0,0,205,206,5,7,0,0,206, + 207,3,22,11,0,207,21,1,0,0,0,208,209,3,24,12,0,209,23,1,0,0,0,210,212, + 3,26,13,0,211,213,3,30,15,0,212,211,1,0,0,0,212,213,1,0,0,0,213,25,1,0, + 0,0,214,216,5,1,0,0,215,214,1,0,0,0,216,219,1,0,0,0,217,215,1,0,0,0,217, + 218,1,0,0,0,218,220,1,0,0,0,219,217,1,0,0,0,220,222,5,7,0,0,221,223,5, + 7,0,0,222,221,1,0,0,0,222,223,1,0,0,0,223,227,1,0,0,0,224,226,5,1,0,0, + 225,224,1,0,0,0,226,229,1,0,0,0,227,225,1,0,0,0,227,228,1,0,0,0,228,230, + 1,0,0,0,229,227,1,0,0,0,230,231,3,28,14,0,231,27,1,0,0,0,232,237,3,16, + 8,0,233,236,5,1,0,0,234,236,3,16,8,0,235,233,1,0,0,0,235,234,1,0,0,0,236, + 239,1,0,0,0,237,235,1,0,0,0,237,238,1,0,0,0,238,29,1,0,0,0,239,237,1,0, + 0,0,240,242,5,1,0,0,241,240,1,0,0,0,242,245,1,0,0,0,243,241,1,0,0,0,243, + 244,1,0,0,0,244,246,1,0,0,0,245,243,1,0,0,0,246,247,3,32,16,0,247,31,1, + 0,0,0,248,250,5,1,0,0,249,248,1,0,0,0,250,253,1,0,0,0,251,249,1,0,0,0, + 251,252,1,0,0,0,252,258,1,0,0,0,253,251,1,0,0,0,254,255,3,34,17,0,255, + 256,3,4,2,0,256,259,1,0,0,0,257,259,3,8,4,0,258,254,1,0,0,0,258,257,1, + 0,0,0,259,260,1,0,0,0,260,258,1,0,0,0,260,261,1,0,0,0,261,33,1,0,0,0,262, + 264,5,1,0,0,263,262,1,0,0,0,264,267,1,0,0,0,265,263,1,0,0,0,265,266,1, + 0,0,0,266,268,1,0,0,0,267,265,1,0,0,0,268,272,5,8,0,0,269,271,7,2,0,0, + 270,269,1,0,0,0,271,274,1,0,0,0,272,270,1,0,0,0,272,273,1,0,0,0,273,35, + 1,0,0,0,274,272,1,0,0,0,275,276,3,38,19,0,276,37,1,0,0,0,277,279,3,42, + 21,0,278,280,3,40,20,0,279,278,1,0,0,0,279,280,1,0,0,0,280,39,1,0,0,0, + 281,282,3,76,38,0,282,283,3,4,2,0,283,286,1,0,0,0,284,286,3,8,4,0,285, + 281,1,0,0,0,285,284,1,0,0,0,286,287,1,0,0,0,287,285,1,0,0,0,287,288,1, + 0,0,0,288,41,1,0,0,0,289,291,5,1,0,0,290,289,1,0,0,0,291,294,1,0,0,0,292, + 290,1,0,0,0,292,293,1,0,0,0,293,295,1,0,0,0,294,292,1,0,0,0,295,299,5, + 10,0,0,296,298,5,1,0,0,297,296,1,0,0,0,298,301,1,0,0,0,299,297,1,0,0,0, + 299,300,1,0,0,0,300,303,1,0,0,0,301,299,1,0,0,0,302,304,3,48,24,0,303, + 302,1,0,0,0,303,304,1,0,0,0,304,308,1,0,0,0,305,307,5,1,0,0,306,305,1, + 0,0,0,307,310,1,0,0,0,308,306,1,0,0,0,308,309,1,0,0,0,309,313,1,0,0,0, + 310,308,1,0,0,0,311,314,3,56,28,0,312,314,3,58,29,0,313,311,1,0,0,0,313, + 312,1,0,0,0,313,314,1,0,0,0,314,318,1,0,0,0,315,317,5,1,0,0,316,315,1, + 0,0,0,317,320,1,0,0,0,318,316,1,0,0,0,318,319,1,0,0,0,319,322,1,0,0,0, + 320,318,1,0,0,0,321,323,3,50,25,0,322,321,1,0,0,0,322,323,1,0,0,0,323, + 327,1,0,0,0,324,326,5,1,0,0,325,324,1,0,0,0,326,329,1,0,0,0,327,325,1, + 0,0,0,327,328,1,0,0,0,328,331,1,0,0,0,329,327,1,0,0,0,330,332,3,52,26, + 0,331,330,1,0,0,0,331,332,1,0,0,0,332,336,1,0,0,0,333,335,5,1,0,0,334, + 333,1,0,0,0,335,338,1,0,0,0,336,334,1,0,0,0,336,337,1,0,0,0,337,340,1, + 0,0,0,338,336,1,0,0,0,339,341,5,18,0,0,340,339,1,0,0,0,340,341,1,0,0,0, + 341,345,1,0,0,0,342,344,5,1,0,0,343,342,1,0,0,0,344,347,1,0,0,0,345,343, + 1,0,0,0,345,346,1,0,0,0,346,350,1,0,0,0,347,345,1,0,0,0,348,351,3,44,22, + 0,349,351,3,46,23,0,350,348,1,0,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351, + 352,1,0,0,0,352,353,3,4,2,0,353,43,1,0,0,0,354,355,5,24,0,0,355,45,1,0, + 0,0,356,357,5,25,0,0,357,47,1,0,0,0,358,359,5,22,0,0,359,49,1,0,0,0,360, + 362,5,20,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362,366,1,0,0,0,363,365,5, + 1,0,0,364,363,1,0,0,0,365,368,1,0,0,0,366,364,1,0,0,0,366,367,1,0,0,0, + 367,369,1,0,0,0,368,366,1,0,0,0,369,370,3,54,27,0,370,51,1,0,0,0,371,375, + 5,21,0,0,372,374,5,1,0,0,373,372,1,0,0,0,374,377,1,0,0,0,375,373,1,0,0, + 0,375,376,1,0,0,0,376,378,1,0,0,0,377,375,1,0,0,0,378,379,3,54,27,0,379, + 53,1,0,0,0,380,397,7,3,0,0,381,383,5,1,0,0,382,381,1,0,0,0,383,386,1,0, + 0,0,384,382,1,0,0,0,384,385,1,0,0,0,385,387,1,0,0,0,386,384,1,0,0,0,387, + 391,5,19,0,0,388,390,5,1,0,0,389,388,1,0,0,0,390,393,1,0,0,0,391,389,1, + 0,0,0,391,392,1,0,0,0,392,394,1,0,0,0,393,391,1,0,0,0,394,396,7,3,0,0, + 395,384,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0,0,397,398,1,0,0,0,398,55, + 1,0,0,0,399,397,1,0,0,0,400,408,5,26,0,0,401,403,5,1,0,0,402,401,1,0,0, + 0,403,406,1,0,0,0,404,402,1,0,0,0,404,405,1,0,0,0,405,407,1,0,0,0,406, + 404,1,0,0,0,407,409,5,23,0,0,408,404,1,0,0,0,408,409,1,0,0,0,409,57,1, + 0,0,0,410,418,5,27,0,0,411,413,5,1,0,0,412,411,1,0,0,0,413,416,1,0,0,0, + 414,412,1,0,0,0,414,415,1,0,0,0,415,417,1,0,0,0,416,414,1,0,0,0,417,419, + 5,23,0,0,418,414,1,0,0,0,418,419,1,0,0,0,419,59,1,0,0,0,420,421,3,62,31, + 0,421,61,1,0,0,0,422,424,3,64,32,0,423,425,3,74,37,0,424,423,1,0,0,0,424, + 425,1,0,0,0,425,63,1,0,0,0,426,428,5,1,0,0,427,426,1,0,0,0,428,431,1,0, + 0,0,429,427,1,0,0,0,429,430,1,0,0,0,430,432,1,0,0,0,431,429,1,0,0,0,432, + 434,5,9,0,0,433,435,3,66,33,0,434,433,1,0,0,0,434,435,1,0,0,0,435,437, + 1,0,0,0,436,438,5,38,0,0,437,436,1,0,0,0,437,438,1,0,0,0,438,440,1,0,0, + 0,439,441,3,68,34,0,440,439,1,0,0,0,440,441,1,0,0,0,441,65,1,0,0,0,442, + 444,7,4,0,0,443,442,1,0,0,0,444,445,1,0,0,0,445,443,1,0,0,0,445,446,1, + 0,0,0,446,67,1,0,0,0,447,453,3,70,35,0,448,453,3,72,36,0,449,453,5,37, + 0,0,450,453,5,38,0,0,451,453,5,1,0,0,452,447,1,0,0,0,452,448,1,0,0,0,452, + 449,1,0,0,0,452,450,1,0,0,0,452,451,1,0,0,0,453,454,1,0,0,0,454,452,1, + 0,0,0,454,455,1,0,0,0,455,69,1,0,0,0,456,457,5,35,0,0,457,71,1,0,0,0,458, + 459,5,36,0,0,459,73,1,0,0,0,460,461,3,76,38,0,461,462,3,4,2,0,462,465, + 1,0,0,0,463,465,3,8,4,0,464,460,1,0,0,0,464,463,1,0,0,0,465,466,1,0,0, + 0,466,464,1,0,0,0,466,467,1,0,0,0,467,75,1,0,0,0,468,470,5,1,0,0,469,468, + 1,0,0,0,470,473,1,0,0,0,471,469,1,0,0,0,471,472,1,0,0,0,472,474,1,0,0, + 0,473,471,1,0,0,0,474,478,5,8,0,0,475,477,7,2,0,0,476,475,1,0,0,0,477, + 480,1,0,0,0,478,476,1,0,0,0,478,479,1,0,0,0,479,77,1,0,0,0,480,478,1,0, + 0,0,481,482,3,80,40,0,482,79,1,0,0,0,483,485,5,1,0,0,484,483,1,0,0,0,485, + 488,1,0,0,0,486,484,1,0,0,0,486,487,1,0,0,0,487,489,1,0,0,0,488,486,1, + 0,0,0,489,493,5,11,0,0,490,492,5,1,0,0,491,490,1,0,0,0,492,495,1,0,0,0, + 493,491,1,0,0,0,493,494,1,0,0,0,494,81,1,0,0,0,495,493,1,0,0,0,496,497, + 3,84,42,0,497,83,1,0,0,0,498,500,5,1,0,0,499,498,1,0,0,0,500,503,1,0,0, + 0,501,499,1,0,0,0,501,502,1,0,0,0,502,504,1,0,0,0,503,501,1,0,0,0,504, + 508,5,12,0,0,505,507,5,1,0,0,506,505,1,0,0,0,507,510,1,0,0,0,508,506,1, + 0,0,0,508,509,1,0,0,0,509,85,1,0,0,0,510,508,1,0,0,0,511,512,3,88,44,0, + 512,87,1,0,0,0,513,515,3,90,45,0,514,513,1,0,0,0,514,515,1,0,0,0,515,517, + 1,0,0,0,516,518,3,92,46,0,517,516,1,0,0,0,517,518,1,0,0,0,518,519,1,0, + 0,0,519,520,3,94,47,0,520,521,3,98,49,0,521,523,3,104,52,0,522,524,3,108, + 54,0,523,522,1,0,0,0,523,524,1,0,0,0,524,89,1,0,0,0,525,527,5,1,0,0,526, + 525,1,0,0,0,527,530,1,0,0,0,528,526,1,0,0,0,528,529,1,0,0,0,529,531,1, + 0,0,0,530,528,1,0,0,0,531,532,5,3,0,0,532,91,1,0,0,0,533,535,5,1,0,0,534, + 533,1,0,0,0,535,538,1,0,0,0,536,534,1,0,0,0,536,537,1,0,0,0,537,539,1, + 0,0,0,538,536,1,0,0,0,539,540,5,14,0,0,540,93,1,0,0,0,541,543,5,1,0,0, + 542,541,1,0,0,0,543,546,1,0,0,0,544,542,1,0,0,0,544,545,1,0,0,0,545,547, + 1,0,0,0,546,544,1,0,0,0,547,548,5,6,0,0,548,549,3,96,48,0,549,95,1,0,0, + 0,550,552,5,40,0,0,551,550,1,0,0,0,552,555,1,0,0,0,553,551,1,0,0,0,553, + 554,1,0,0,0,554,97,1,0,0,0,555,553,1,0,0,0,556,558,5,1,0,0,557,556,1,0, + 0,0,558,561,1,0,0,0,559,557,1,0,0,0,559,560,1,0,0,0,560,568,1,0,0,0,561, + 559,1,0,0,0,562,563,3,100,50,0,563,564,3,4,2,0,564,567,1,0,0,0,565,567, + 3,102,51,0,566,562,1,0,0,0,566,565,1,0,0,0,567,570,1,0,0,0,568,566,1,0, + 0,0,568,569,1,0,0,0,569,99,1,0,0,0,570,568,1,0,0,0,571,575,5,8,0,0,572, + 574,7,5,0,0,573,572,1,0,0,0,574,577,1,0,0,0,575,573,1,0,0,0,575,576,1, + 0,0,0,576,101,1,0,0,0,577,575,1,0,0,0,578,580,7,1,0,0,579,578,1,0,0,0, + 580,581,1,0,0,0,581,579,1,0,0,0,581,582,1,0,0,0,582,103,1,0,0,0,583,585, + 3,106,53,0,584,583,1,0,0,0,584,585,1,0,0,0,585,586,1,0,0,0,586,592,3,114, + 57,0,587,589,3,114,57,0,588,590,3,106,53,0,589,588,1,0,0,0,589,590,1,0, + 0,0,590,592,1,0,0,0,591,584,1,0,0,0,591,587,1,0,0,0,592,105,1,0,0,0,593, + 595,5,1,0,0,594,593,1,0,0,0,595,598,1,0,0,0,596,594,1,0,0,0,596,597,1, + 0,0,0,597,599,1,0,0,0,598,596,1,0,0,0,599,602,5,13,0,0,600,603,3,110,55, + 0,601,603,3,112,56,0,602,600,1,0,0,0,602,601,1,0,0,0,603,604,1,0,0,0,604, + 602,1,0,0,0,604,605,1,0,0,0,605,107,1,0,0,0,606,608,5,1,0,0,607,606,1, + 0,0,0,608,611,1,0,0,0,609,607,1,0,0,0,609,610,1,0,0,0,610,612,1,0,0,0, + 611,609,1,0,0,0,612,615,5,16,0,0,613,616,3,110,55,0,614,616,3,112,56,0, + 615,613,1,0,0,0,615,614,1,0,0,0,616,617,1,0,0,0,617,615,1,0,0,0,617,618, + 1,0,0,0,618,109,1,0,0,0,619,621,5,1,0,0,620,619,1,0,0,0,621,624,1,0,0, + 0,622,620,1,0,0,0,622,623,1,0,0,0,623,625,1,0,0,0,624,622,1,0,0,0,625, + 629,5,8,0,0,626,628,7,5,0,0,627,626,1,0,0,0,628,631,1,0,0,0,629,627,1, + 0,0,0,629,630,1,0,0,0,630,632,1,0,0,0,631,629,1,0,0,0,632,633,3,4,2,0, + 633,111,1,0,0,0,634,636,7,1,0,0,635,634,1,0,0,0,636,637,1,0,0,0,637,635, + 1,0,0,0,637,638,1,0,0,0,638,113,1,0,0,0,639,641,5,1,0,0,640,639,1,0,0, + 0,641,644,1,0,0,0,642,640,1,0,0,0,642,643,1,0,0,0,643,645,1,0,0,0,644, + 642,1,0,0,0,645,646,5,15,0,0,646,115,1,0,0,0,647,648,3,118,59,0,648,117, + 1,0,0,0,649,651,5,1,0,0,650,649,1,0,0,0,651,654,1,0,0,0,652,650,1,0,0, + 0,652,653,1,0,0,0,653,655,1,0,0,0,654,652,1,0,0,0,655,656,5,4,0,0,656, + 119,1,0,0,0,94,123,126,128,141,146,153,158,166,173,181,183,191,197,202, + 212,217,222,227,235,237,243,251,258,260,265,272,279,285,287,292,299,303, + 308,313,318,322,327,331,336,340,345,350,361,366,375,384,391,397,404,408, + 414,418,424,429,434,437,440,445,452,454,464,466,471,478,486,493,501,508, + 514,517,523,528,536,544,553,559,566,568,575,581,584,589,591,596,602,604, + 609,615,617,622,629,637,642,652 }; public static readonly ATN _ATN = diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp index 3458f71511..481811f9ed 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Generated/LUFileParser.interp @@ -148,4 +148,4 @@ modelInfoDefinition atn: -[4, 1, 40, 655, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 1, 0, 4, 0, 122, 8, 0, 11, 0, 12, 0, 123, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 138, 8, 1, 1, 2, 5, 2, 141, 8, 2, 10, 2, 12, 2, 144, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 3, 3, 150, 8, 3, 1, 4, 4, 4, 153, 8, 4, 11, 4, 12, 4, 154, 1, 5, 1, 5, 1, 5, 1, 6, 5, 6, 161, 8, 6, 10, 6, 12, 6, 164, 9, 6, 1, 6, 1, 6, 5, 6, 168, 8, 6, 10, 6, 12, 6, 171, 9, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 5, 7, 178, 8, 7, 10, 7, 12, 7, 181, 9, 7, 1, 8, 1, 8, 1, 8, 5, 8, 186, 8, 8, 10, 8, 12, 8, 189, 9, 8, 1, 9, 4, 9, 192, 8, 9, 11, 9, 12, 9, 193, 1, 10, 5, 10, 197, 8, 10, 10, 10, 12, 10, 200, 9, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 209, 8, 12, 1, 13, 5, 13, 212, 8, 13, 10, 13, 12, 13, 215, 9, 13, 1, 13, 1, 13, 3, 13, 219, 8, 13, 1, 13, 5, 13, 222, 8, 13, 10, 13, 12, 13, 225, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 232, 8, 14, 10, 14, 12, 14, 235, 9, 14, 1, 15, 5, 15, 238, 8, 15, 10, 15, 12, 15, 241, 9, 15, 1, 15, 1, 15, 1, 16, 5, 16, 246, 8, 16, 10, 16, 12, 16, 249, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 4, 16, 256, 8, 16, 11, 16, 12, 16, 257, 1, 17, 5, 17, 261, 8, 17, 10, 17, 12, 17, 264, 9, 17, 1, 17, 1, 17, 5, 17, 268, 8, 17, 10, 17, 12, 17, 271, 9, 17, 1, 18, 1, 18, 1, 19, 1, 19, 3, 19, 277, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 4, 20, 283, 8, 20, 11, 20, 12, 20, 284, 1, 21, 5, 21, 288, 8, 21, 10, 21, 12, 21, 291, 9, 21, 1, 21, 1, 21, 5, 21, 295, 8, 21, 10, 21, 12, 21, 298, 9, 21, 1, 21, 3, 21, 301, 8, 21, 1, 21, 5, 21, 304, 8, 21, 10, 21, 12, 21, 307, 9, 21, 1, 21, 1, 21, 3, 21, 311, 8, 21, 1, 21, 5, 21, 314, 8, 21, 10, 21, 12, 21, 317, 9, 21, 1, 21, 3, 21, 320, 8, 21, 1, 21, 5, 21, 323, 8, 21, 10, 21, 12, 21, 326, 9, 21, 1, 21, 3, 21, 329, 8, 21, 1, 21, 5, 21, 332, 8, 21, 10, 21, 12, 21, 335, 9, 21, 1, 21, 3, 21, 338, 8, 21, 1, 21, 5, 21, 341, 8, 21, 10, 21, 12, 21, 344, 9, 21, 1, 21, 1, 21, 3, 21, 348, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 3, 25, 359, 8, 25, 1, 25, 5, 25, 362, 8, 25, 10, 25, 12, 25, 365, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 5, 26, 371, 8, 26, 10, 26, 12, 26, 374, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 5, 27, 380, 8, 27, 10, 27, 12, 27, 383, 9, 27, 1, 27, 1, 27, 5, 27, 387, 8, 27, 10, 27, 12, 27, 390, 9, 27, 1, 27, 5, 27, 393, 8, 27, 10, 27, 12, 27, 396, 9, 27, 1, 28, 1, 28, 5, 28, 400, 8, 28, 10, 28, 12, 28, 403, 9, 28, 1, 28, 3, 28, 406, 8, 28, 1, 29, 1, 29, 5, 29, 410, 8, 29, 10, 29, 12, 29, 413, 9, 29, 1, 29, 3, 29, 416, 8, 29, 1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 422, 8, 31, 1, 32, 5, 32, 425, 8, 32, 10, 32, 12, 32, 428, 9, 32, 1, 32, 1, 32, 3, 32, 432, 8, 32, 1, 32, 3, 32, 435, 8, 32, 1, 32, 3, 32, 438, 8, 32, 1, 33, 4, 33, 441, 8, 33, 11, 33, 12, 33, 442, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 4, 34, 450, 8, 34, 11, 34, 12, 34, 451, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 462, 8, 37, 11, 37, 12, 37, 463, 1, 38, 5, 38, 467, 8, 38, 10, 38, 12, 38, 470, 9, 38, 1, 38, 1, 38, 5, 38, 474, 8, 38, 10, 38, 12, 38, 477, 9, 38, 1, 39, 1, 39, 1, 40, 5, 40, 482, 8, 40, 10, 40, 12, 40, 485, 9, 40, 1, 40, 1, 40, 5, 40, 489, 8, 40, 10, 40, 12, 40, 492, 9, 40, 1, 41, 1, 41, 1, 42, 5, 42, 497, 8, 42, 10, 42, 12, 42, 500, 9, 42, 1, 42, 1, 42, 5, 42, 504, 8, 42, 10, 42, 12, 42, 507, 9, 42, 1, 43, 1, 43, 1, 44, 3, 44, 512, 8, 44, 1, 44, 3, 44, 515, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 521, 8, 44, 1, 45, 5, 45, 524, 8, 45, 10, 45, 12, 45, 527, 9, 45, 1, 45, 1, 45, 1, 46, 5, 46, 532, 8, 46, 10, 46, 12, 46, 535, 9, 46, 1, 46, 1, 46, 1, 47, 5, 47, 540, 8, 47, 10, 47, 12, 47, 543, 9, 47, 1, 47, 1, 47, 1, 47, 1, 48, 5, 48, 549, 8, 48, 10, 48, 12, 48, 552, 9, 48, 1, 49, 5, 49, 555, 8, 49, 10, 49, 12, 49, 558, 9, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 564, 8, 49, 10, 49, 12, 49, 567, 9, 49, 1, 50, 1, 50, 5, 50, 571, 8, 50, 10, 50, 12, 50, 574, 9, 50, 1, 51, 4, 51, 577, 8, 51, 11, 51, 12, 51, 578, 1, 52, 3, 52, 582, 8, 52, 1, 52, 1, 52, 1, 52, 3, 52, 587, 8, 52, 3, 52, 589, 8, 52, 1, 53, 5, 53, 592, 8, 53, 10, 53, 12, 53, 595, 9, 53, 1, 53, 1, 53, 1, 53, 4, 53, 600, 8, 53, 11, 53, 12, 53, 601, 1, 54, 5, 54, 605, 8, 54, 10, 54, 12, 54, 608, 9, 54, 1, 54, 1, 54, 1, 54, 4, 54, 613, 8, 54, 11, 54, 12, 54, 614, 1, 55, 5, 55, 618, 8, 55, 10, 55, 12, 55, 621, 9, 55, 1, 55, 1, 55, 5, 55, 625, 8, 55, 10, 55, 12, 55, 628, 9, 55, 1, 55, 1, 55, 1, 56, 4, 56, 633, 8, 56, 11, 56, 12, 56, 634, 1, 57, 5, 57, 638, 8, 57, 10, 57, 12, 57, 641, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 5, 59, 648, 8, 59, 10, 59, 12, 59, 651, 9, 59, 1, 59, 1, 59, 1, 59, 1, 123, 0, 60, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 0, 6, 1, 1, 2, 2, 2, 0, 1, 1, 17, 17, 2, 0, 1, 1, 31, 33, 1, 0, 26, 27, 2, 0, 1, 1, 37, 37, 2, 0, 1, 1, 33, 33, 700, 0, 121, 1, 0, 0, 0, 2, 137, 1, 0, 0, 0, 4, 142, 1, 0, 0, 0, 6, 147, 1, 0, 0, 0, 8, 152, 1, 0, 0, 0, 10, 156, 1, 0, 0, 0, 12, 162, 1, 0, 0, 0, 14, 174, 1, 0, 0, 0, 16, 182, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 198, 1, 0, 0, 0, 22, 204, 1, 0, 0, 0, 24, 206, 1, 0, 0, 0, 26, 213, 1, 0, 0, 0, 28, 228, 1, 0, 0, 0, 30, 239, 1, 0, 0, 0, 32, 247, 1, 0, 0, 0, 34, 262, 1, 0, 0, 0, 36, 272, 1, 0, 0, 0, 38, 274, 1, 0, 0, 0, 40, 282, 1, 0, 0, 0, 42, 289, 1, 0, 0, 0, 44, 351, 1, 0, 0, 0, 46, 353, 1, 0, 0, 0, 48, 355, 1, 0, 0, 0, 50, 358, 1, 0, 0, 0, 52, 368, 1, 0, 0, 0, 54, 377, 1, 0, 0, 0, 56, 397, 1, 0, 0, 0, 58, 407, 1, 0, 0, 0, 60, 417, 1, 0, 0, 0, 62, 419, 1, 0, 0, 0, 64, 426, 1, 0, 0, 0, 66, 440, 1, 0, 0, 0, 68, 449, 1, 0, 0, 0, 70, 453, 1, 0, 0, 0, 72, 455, 1, 0, 0, 0, 74, 461, 1, 0, 0, 0, 76, 468, 1, 0, 0, 0, 78, 478, 1, 0, 0, 0, 80, 483, 1, 0, 0, 0, 82, 493, 1, 0, 0, 0, 84, 498, 1, 0, 0, 0, 86, 508, 1, 0, 0, 0, 88, 511, 1, 0, 0, 0, 90, 525, 1, 0, 0, 0, 92, 533, 1, 0, 0, 0, 94, 541, 1, 0, 0, 0, 96, 550, 1, 0, 0, 0, 98, 556, 1, 0, 0, 0, 100, 568, 1, 0, 0, 0, 102, 576, 1, 0, 0, 0, 104, 588, 1, 0, 0, 0, 106, 593, 1, 0, 0, 0, 108, 606, 1, 0, 0, 0, 110, 619, 1, 0, 0, 0, 112, 632, 1, 0, 0, 0, 114, 639, 1, 0, 0, 0, 116, 644, 1, 0, 0, 0, 118, 649, 1, 0, 0, 0, 120, 122, 3, 2, 1, 0, 121, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 126, 5, 0, 0, 1, 126, 1, 1, 0, 0, 0, 127, 138, 5, 2, 0, 0, 128, 138, 3, 10, 5, 0, 129, 138, 3, 22, 11, 0, 130, 138, 3, 60, 30, 0, 131, 138, 3, 36, 18, 0, 132, 138, 3, 78, 39, 0, 133, 138, 3, 82, 41, 0, 134, 138, 3, 86, 43, 0, 135, 138, 3, 116, 58, 0, 136, 138, 3, 6, 3, 0, 137, 127, 1, 0, 0, 0, 137, 128, 1, 0, 0, 0, 137, 129, 1, 0, 0, 0, 137, 130, 1, 0, 0, 0, 137, 131, 1, 0, 0, 0, 137, 132, 1, 0, 0, 0, 137, 133, 1, 0, 0, 0, 137, 134, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 136, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 141, 5, 1, 0, 0, 140, 139, 1, 0, 0, 0, 141, 144, 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, 145, 146, 7, 0, 0, 0, 146, 5, 1, 0, 0, 0, 147, 149, 5, 5, 0, 0, 148, 150, 5, 2, 0, 0, 149, 148, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 7, 1, 0, 0, 0, 151, 153, 7, 1, 0, 0, 152, 151, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 154, 155, 1, 0, 0, 0, 155, 9, 1, 0, 0, 0, 156, 157, 3, 12, 6, 0, 157, 158, 3, 18, 9, 0, 158, 11, 1, 0, 0, 0, 159, 161, 5, 1, 0, 0, 160, 159, 1, 0, 0, 0, 161, 164, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 165, 169, 5, 7, 0, 0, 166, 168, 5, 1, 0, 0, 167, 166, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 3, 14, 7, 0, 173, 13, 1, 0, 0, 0, 174, 179, 3, 16, 8, 0, 175, 178, 5, 1, 0, 0, 176, 178, 3, 16, 8, 0, 177, 175, 1, 0, 0, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 15, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 187, 5, 29, 0, 0, 183, 184, 5, 30, 0, 0, 184, 186, 5, 29, 0, 0, 185, 183, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 17, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 192, 3, 20, 10, 0, 191, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 19, 1, 0, 0, 0, 195, 197, 5, 1, 0, 0, 196, 195, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 201, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 201, 202, 5, 7, 0, 0, 202, 203, 3, 22, 11, 0, 203, 21, 1, 0, 0, 0, 204, 205, 3, 24, 12, 0, 205, 23, 1, 0, 0, 0, 206, 208, 3, 26, 13, 0, 207, 209, 3, 30, 15, 0, 208, 207, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 25, 1, 0, 0, 0, 210, 212, 5, 1, 0, 0, 211, 210, 1, 0, 0, 0, 212, 215, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 216, 1, 0, 0, 0, 215, 213, 1, 0, 0, 0, 216, 218, 5, 7, 0, 0, 217, 219, 5, 7, 0, 0, 218, 217, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 223, 1, 0, 0, 0, 220, 222, 5, 1, 0, 0, 221, 220, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 226, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 3, 28, 14, 0, 227, 27, 1, 0, 0, 0, 228, 233, 3, 16, 8, 0, 229, 232, 5, 1, 0, 0, 230, 232, 3, 16, 8, 0, 231, 229, 1, 0, 0, 0, 231, 230, 1, 0, 0, 0, 232, 235, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 29, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 236, 238, 5, 1, 0, 0, 237, 236, 1, 0, 0, 0, 238, 241, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 242, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 242, 243, 3, 32, 16, 0, 243, 31, 1, 0, 0, 0, 244, 246, 5, 1, 0, 0, 245, 244, 1, 0, 0, 0, 246, 249, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 255, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 250, 251, 3, 34, 17, 0, 251, 252, 3, 4, 2, 0, 252, 256, 1, 0, 0, 0, 253, 256, 3, 8, 4, 0, 254, 256, 3, 6, 3, 0, 255, 250, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 255, 254, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 33, 1, 0, 0, 0, 259, 261, 5, 1, 0, 0, 260, 259, 1, 0, 0, 0, 261, 264, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 265, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 265, 269, 5, 8, 0, 0, 266, 268, 7, 2, 0, 0, 267, 266, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 35, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 273, 3, 38, 19, 0, 273, 37, 1, 0, 0, 0, 274, 276, 3, 42, 21, 0, 275, 277, 3, 40, 20, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 39, 1, 0, 0, 0, 278, 279, 3, 76, 38, 0, 279, 280, 3, 4, 2, 0, 280, 283, 1, 0, 0, 0, 281, 283, 3, 8, 4, 0, 282, 278, 1, 0, 0, 0, 282, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 41, 1, 0, 0, 0, 286, 288, 5, 1, 0, 0, 287, 286, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 296, 5, 10, 0, 0, 293, 295, 5, 1, 0, 0, 294, 293, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 301, 3, 48, 24, 0, 300, 299, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 305, 1, 0, 0, 0, 302, 304, 5, 1, 0, 0, 303, 302, 1, 0, 0, 0, 304, 307, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 310, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 308, 311, 3, 56, 28, 0, 309, 311, 3, 58, 29, 0, 310, 308, 1, 0, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 315, 1, 0, 0, 0, 312, 314, 5, 1, 0, 0, 313, 312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 320, 3, 50, 25, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 324, 1, 0, 0, 0, 321, 323, 5, 1, 0, 0, 322, 321, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 327, 329, 3, 52, 26, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 333, 1, 0, 0, 0, 330, 332, 5, 1, 0, 0, 331, 330, 1, 0, 0, 0, 332, 335, 1, 0, 0, 0, 333, 331, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 337, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 336, 338, 5, 18, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 342, 1, 0, 0, 0, 339, 341, 5, 1, 0, 0, 340, 339, 1, 0, 0, 0, 341, 344, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 347, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 345, 348, 3, 44, 22, 0, 346, 348, 3, 46, 23, 0, 347, 345, 1, 0, 0, 0, 347, 346, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 350, 3, 4, 2, 0, 350, 43, 1, 0, 0, 0, 351, 352, 5, 24, 0, 0, 352, 45, 1, 0, 0, 0, 353, 354, 5, 25, 0, 0, 354, 47, 1, 0, 0, 0, 355, 356, 5, 22, 0, 0, 356, 49, 1, 0, 0, 0, 357, 359, 5, 20, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 363, 1, 0, 0, 0, 360, 362, 5, 1, 0, 0, 361, 360, 1, 0, 0, 0, 362, 365, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 367, 3, 54, 27, 0, 367, 51, 1, 0, 0, 0, 368, 372, 5, 21, 0, 0, 369, 371, 5, 1, 0, 0, 370, 369, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 375, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 376, 3, 54, 27, 0, 376, 53, 1, 0, 0, 0, 377, 394, 7, 3, 0, 0, 378, 380, 5, 1, 0, 0, 379, 378, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 388, 5, 19, 0, 0, 385, 387, 5, 1, 0, 0, 386, 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 391, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, 393, 7, 3, 0, 0, 392, 381, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 55, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 405, 5, 26, 0, 0, 398, 400, 5, 1, 0, 0, 399, 398, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 406, 5, 23, 0, 0, 405, 401, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 57, 1, 0, 0, 0, 407, 415, 5, 27, 0, 0, 408, 410, 5, 1, 0, 0, 409, 408, 1, 0, 0, 0, 410, 413, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 414, 416, 5, 23, 0, 0, 415, 411, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 59, 1, 0, 0, 0, 417, 418, 3, 62, 31, 0, 418, 61, 1, 0, 0, 0, 419, 421, 3, 64, 32, 0, 420, 422, 3, 74, 37, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 63, 1, 0, 0, 0, 423, 425, 5, 1, 0, 0, 424, 423, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 429, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 429, 431, 5, 9, 0, 0, 430, 432, 3, 66, 33, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, 0, 0, 433, 435, 5, 38, 0, 0, 434, 433, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 437, 1, 0, 0, 0, 436, 438, 3, 68, 34, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 65, 1, 0, 0, 0, 439, 441, 7, 4, 0, 0, 440, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 67, 1, 0, 0, 0, 444, 450, 3, 70, 35, 0, 445, 450, 3, 72, 36, 0, 446, 450, 5, 37, 0, 0, 447, 450, 5, 38, 0, 0, 448, 450, 5, 1, 0, 0, 449, 444, 1, 0, 0, 0, 449, 445, 1, 0, 0, 0, 449, 446, 1, 0, 0, 0, 449, 447, 1, 0, 0, 0, 449, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 69, 1, 0, 0, 0, 453, 454, 5, 35, 0, 0, 454, 71, 1, 0, 0, 0, 455, 456, 5, 36, 0, 0, 456, 73, 1, 0, 0, 0, 457, 458, 3, 76, 38, 0, 458, 459, 3, 4, 2, 0, 459, 462, 1, 0, 0, 0, 460, 462, 3, 8, 4, 0, 461, 457, 1, 0, 0, 0, 461, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 75, 1, 0, 0, 0, 465, 467, 5, 1, 0, 0, 466, 465, 1, 0, 0, 0, 467, 470, 1, 0, 0, 0, 468, 466, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 471, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 475, 5, 8, 0, 0, 472, 474, 7, 2, 0, 0, 473, 472, 1, 0, 0, 0, 474, 477, 1, 0, 0, 0, 475, 473, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 77, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 478, 479, 3, 80, 40, 0, 479, 79, 1, 0, 0, 0, 480, 482, 5, 1, 0, 0, 481, 480, 1, 0, 0, 0, 482, 485, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 486, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 486, 490, 5, 11, 0, 0, 487, 489, 5, 1, 0, 0, 488, 487, 1, 0, 0, 0, 489, 492, 1, 0, 0, 0, 490, 488, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 81, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 493, 494, 3, 84, 42, 0, 494, 83, 1, 0, 0, 0, 495, 497, 5, 1, 0, 0, 496, 495, 1, 0, 0, 0, 497, 500, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 501, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 501, 505, 5, 12, 0, 0, 502, 504, 5, 1, 0, 0, 503, 502, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 85, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 3, 88, 44, 0, 509, 87, 1, 0, 0, 0, 510, 512, 3, 90, 45, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 515, 3, 92, 46, 0, 514, 513, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 94, 47, 0, 517, 518, 3, 98, 49, 0, 518, 520, 3, 104, 52, 0, 519, 521, 3, 108, 54, 0, 520, 519, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 89, 1, 0, 0, 0, 522, 524, 5, 1, 0, 0, 523, 522, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 528, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 5, 3, 0, 0, 529, 91, 1, 0, 0, 0, 530, 532, 5, 1, 0, 0, 531, 530, 1, 0, 0, 0, 532, 535, 1, 0, 0, 0, 533, 531, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 536, 537, 5, 14, 0, 0, 537, 93, 1, 0, 0, 0, 538, 540, 5, 1, 0, 0, 539, 538, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 544, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 545, 5, 6, 0, 0, 545, 546, 3, 96, 48, 0, 546, 95, 1, 0, 0, 0, 547, 549, 5, 40, 0, 0, 548, 547, 1, 0, 0, 0, 549, 552, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 97, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 553, 555, 5, 1, 0, 0, 554, 553, 1, 0, 0, 0, 555, 558, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 565, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 559, 560, 3, 100, 50, 0, 560, 561, 3, 4, 2, 0, 561, 564, 1, 0, 0, 0, 562, 564, 3, 102, 51, 0, 563, 559, 1, 0, 0, 0, 563, 562, 1, 0, 0, 0, 564, 567, 1, 0, 0, 0, 565, 563, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 99, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 568, 572, 5, 8, 0, 0, 569, 571, 7, 5, 0, 0, 570, 569, 1, 0, 0, 0, 571, 574, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 101, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 577, 7, 1, 0, 0, 576, 575, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 103, 1, 0, 0, 0, 580, 582, 3, 106, 53, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 589, 3, 114, 57, 0, 584, 586, 3, 114, 57, 0, 585, 587, 3, 106, 53, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 581, 1, 0, 0, 0, 588, 584, 1, 0, 0, 0, 589, 105, 1, 0, 0, 0, 590, 592, 5, 1, 0, 0, 591, 590, 1, 0, 0, 0, 592, 595, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 596, 599, 5, 13, 0, 0, 597, 600, 3, 110, 55, 0, 598, 600, 3, 112, 56, 0, 599, 597, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 107, 1, 0, 0, 0, 603, 605, 5, 1, 0, 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 612, 5, 16, 0, 0, 610, 613, 3, 110, 55, 0, 611, 613, 3, 112, 56, 0, 612, 610, 1, 0, 0, 0, 612, 611, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 109, 1, 0, 0, 0, 616, 618, 5, 1, 0, 0, 617, 616, 1, 0, 0, 0, 618, 621, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 622, 626, 5, 8, 0, 0, 623, 625, 7, 5, 0, 0, 624, 623, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 630, 3, 4, 2, 0, 630, 111, 1, 0, 0, 0, 631, 633, 7, 1, 0, 0, 632, 631, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 632, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 113, 1, 0, 0, 0, 636, 638, 5, 1, 0, 0, 637, 636, 1, 0, 0, 0, 638, 641, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 642, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 642, 643, 5, 15, 0, 0, 643, 115, 1, 0, 0, 0, 644, 645, 3, 118, 59, 0, 645, 117, 1, 0, 0, 0, 646, 648, 5, 1, 0, 0, 647, 646, 1, 0, 0, 0, 648, 651, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 652, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 653, 5, 4, 0, 0, 653, 119, 1, 0, 0, 0, 92, 123, 137, 142, 149, 154, 162, 169, 177, 179, 187, 193, 198, 208, 213, 218, 223, 231, 233, 239, 247, 255, 257, 262, 269, 276, 282, 284, 289, 296, 300, 305, 310, 315, 319, 324, 328, 333, 337, 342, 347, 358, 363, 372, 381, 388, 394, 401, 405, 411, 415, 421, 426, 431, 434, 437, 442, 449, 451, 461, 463, 468, 475, 483, 490, 498, 505, 511, 514, 520, 525, 533, 541, 550, 556, 563, 565, 572, 578, 581, 586, 588, 593, 599, 601, 606, 612, 614, 619, 626, 634, 639, 649] \ No newline at end of file +[4, 1, 40, 658, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 1, 0, 4, 0, 122, 8, 0, 11, 0, 12, 0, 123, 1, 0, 3, 0, 127, 8, 0, 3, 0, 129, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 142, 8, 1, 1, 2, 5, 2, 145, 8, 2, 10, 2, 12, 2, 148, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 3, 3, 154, 8, 3, 1, 4, 4, 4, 157, 8, 4, 11, 4, 12, 4, 158, 1, 5, 1, 5, 1, 5, 1, 6, 5, 6, 165, 8, 6, 10, 6, 12, 6, 168, 9, 6, 1, 6, 1, 6, 5, 6, 172, 8, 6, 10, 6, 12, 6, 175, 9, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 5, 7, 182, 8, 7, 10, 7, 12, 7, 185, 9, 7, 1, 8, 1, 8, 1, 8, 5, 8, 190, 8, 8, 10, 8, 12, 8, 193, 9, 8, 1, 9, 4, 9, 196, 8, 9, 11, 9, 12, 9, 197, 1, 10, 5, 10, 201, 8, 10, 10, 10, 12, 10, 204, 9, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 213, 8, 12, 1, 13, 5, 13, 216, 8, 13, 10, 13, 12, 13, 219, 9, 13, 1, 13, 1, 13, 3, 13, 223, 8, 13, 1, 13, 5, 13, 226, 8, 13, 10, 13, 12, 13, 229, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 236, 8, 14, 10, 14, 12, 14, 239, 9, 14, 1, 15, 5, 15, 242, 8, 15, 10, 15, 12, 15, 245, 9, 15, 1, 15, 1, 15, 1, 16, 5, 16, 250, 8, 16, 10, 16, 12, 16, 253, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 4, 16, 259, 8, 16, 11, 16, 12, 16, 260, 1, 17, 5, 17, 264, 8, 17, 10, 17, 12, 17, 267, 9, 17, 1, 17, 1, 17, 5, 17, 271, 8, 17, 10, 17, 12, 17, 274, 9, 17, 1, 18, 1, 18, 1, 19, 1, 19, 3, 19, 280, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 4, 20, 286, 8, 20, 11, 20, 12, 20, 287, 1, 21, 5, 21, 291, 8, 21, 10, 21, 12, 21, 294, 9, 21, 1, 21, 1, 21, 5, 21, 298, 8, 21, 10, 21, 12, 21, 301, 9, 21, 1, 21, 3, 21, 304, 8, 21, 1, 21, 5, 21, 307, 8, 21, 10, 21, 12, 21, 310, 9, 21, 1, 21, 1, 21, 3, 21, 314, 8, 21, 1, 21, 5, 21, 317, 8, 21, 10, 21, 12, 21, 320, 9, 21, 1, 21, 3, 21, 323, 8, 21, 1, 21, 5, 21, 326, 8, 21, 10, 21, 12, 21, 329, 9, 21, 1, 21, 3, 21, 332, 8, 21, 1, 21, 5, 21, 335, 8, 21, 10, 21, 12, 21, 338, 9, 21, 1, 21, 3, 21, 341, 8, 21, 1, 21, 5, 21, 344, 8, 21, 10, 21, 12, 21, 347, 9, 21, 1, 21, 1, 21, 3, 21, 351, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 3, 25, 362, 8, 25, 1, 25, 5, 25, 365, 8, 25, 10, 25, 12, 25, 368, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 5, 26, 374, 8, 26, 10, 26, 12, 26, 377, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 5, 27, 383, 8, 27, 10, 27, 12, 27, 386, 9, 27, 1, 27, 1, 27, 5, 27, 390, 8, 27, 10, 27, 12, 27, 393, 9, 27, 1, 27, 5, 27, 396, 8, 27, 10, 27, 12, 27, 399, 9, 27, 1, 28, 1, 28, 5, 28, 403, 8, 28, 10, 28, 12, 28, 406, 9, 28, 1, 28, 3, 28, 409, 8, 28, 1, 29, 1, 29, 5, 29, 413, 8, 29, 10, 29, 12, 29, 416, 9, 29, 1, 29, 3, 29, 419, 8, 29, 1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 425, 8, 31, 1, 32, 5, 32, 428, 8, 32, 10, 32, 12, 32, 431, 9, 32, 1, 32, 1, 32, 3, 32, 435, 8, 32, 1, 32, 3, 32, 438, 8, 32, 1, 32, 3, 32, 441, 8, 32, 1, 33, 4, 33, 444, 8, 33, 11, 33, 12, 33, 445, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 4, 34, 453, 8, 34, 11, 34, 12, 34, 454, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 465, 8, 37, 11, 37, 12, 37, 466, 1, 38, 5, 38, 470, 8, 38, 10, 38, 12, 38, 473, 9, 38, 1, 38, 1, 38, 5, 38, 477, 8, 38, 10, 38, 12, 38, 480, 9, 38, 1, 39, 1, 39, 1, 40, 5, 40, 485, 8, 40, 10, 40, 12, 40, 488, 9, 40, 1, 40, 1, 40, 5, 40, 492, 8, 40, 10, 40, 12, 40, 495, 9, 40, 1, 41, 1, 41, 1, 42, 5, 42, 500, 8, 42, 10, 42, 12, 42, 503, 9, 42, 1, 42, 1, 42, 5, 42, 507, 8, 42, 10, 42, 12, 42, 510, 9, 42, 1, 43, 1, 43, 1, 44, 3, 44, 515, 8, 44, 1, 44, 3, 44, 518, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 524, 8, 44, 1, 45, 5, 45, 527, 8, 45, 10, 45, 12, 45, 530, 9, 45, 1, 45, 1, 45, 1, 46, 5, 46, 535, 8, 46, 10, 46, 12, 46, 538, 9, 46, 1, 46, 1, 46, 1, 47, 5, 47, 543, 8, 47, 10, 47, 12, 47, 546, 9, 47, 1, 47, 1, 47, 1, 47, 1, 48, 5, 48, 552, 8, 48, 10, 48, 12, 48, 555, 9, 48, 1, 49, 5, 49, 558, 8, 49, 10, 49, 12, 49, 561, 9, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 567, 8, 49, 10, 49, 12, 49, 570, 9, 49, 1, 50, 1, 50, 5, 50, 574, 8, 50, 10, 50, 12, 50, 577, 9, 50, 1, 51, 4, 51, 580, 8, 51, 11, 51, 12, 51, 581, 1, 52, 3, 52, 585, 8, 52, 1, 52, 1, 52, 1, 52, 3, 52, 590, 8, 52, 3, 52, 592, 8, 52, 1, 53, 5, 53, 595, 8, 53, 10, 53, 12, 53, 598, 9, 53, 1, 53, 1, 53, 1, 53, 4, 53, 603, 8, 53, 11, 53, 12, 53, 604, 1, 54, 5, 54, 608, 8, 54, 10, 54, 12, 54, 611, 9, 54, 1, 54, 1, 54, 1, 54, 4, 54, 616, 8, 54, 11, 54, 12, 54, 617, 1, 55, 5, 55, 621, 8, 55, 10, 55, 12, 55, 624, 9, 55, 1, 55, 1, 55, 5, 55, 628, 8, 55, 10, 55, 12, 55, 631, 9, 55, 1, 55, 1, 55, 1, 56, 4, 56, 636, 8, 56, 11, 56, 12, 56, 637, 1, 57, 5, 57, 641, 8, 57, 10, 57, 12, 57, 644, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 5, 59, 651, 8, 59, 10, 59, 12, 59, 654, 9, 59, 1, 59, 1, 59, 1, 59, 1, 123, 0, 60, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 0, 6, 1, 1, 2, 2, 2, 0, 1, 1, 17, 17, 2, 0, 1, 1, 31, 33, 1, 0, 26, 27, 2, 0, 1, 1, 37, 37, 2, 0, 1, 1, 33, 33, 703, 0, 128, 1, 0, 0, 0, 2, 141, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 6, 151, 1, 0, 0, 0, 8, 156, 1, 0, 0, 0, 10, 160, 1, 0, 0, 0, 12, 166, 1, 0, 0, 0, 14, 178, 1, 0, 0, 0, 16, 186, 1, 0, 0, 0, 18, 195, 1, 0, 0, 0, 20, 202, 1, 0, 0, 0, 22, 208, 1, 0, 0, 0, 24, 210, 1, 0, 0, 0, 26, 217, 1, 0, 0, 0, 28, 232, 1, 0, 0, 0, 30, 243, 1, 0, 0, 0, 32, 251, 1, 0, 0, 0, 34, 265, 1, 0, 0, 0, 36, 275, 1, 0, 0, 0, 38, 277, 1, 0, 0, 0, 40, 285, 1, 0, 0, 0, 42, 292, 1, 0, 0, 0, 44, 354, 1, 0, 0, 0, 46, 356, 1, 0, 0, 0, 48, 358, 1, 0, 0, 0, 50, 361, 1, 0, 0, 0, 52, 371, 1, 0, 0, 0, 54, 380, 1, 0, 0, 0, 56, 400, 1, 0, 0, 0, 58, 410, 1, 0, 0, 0, 60, 420, 1, 0, 0, 0, 62, 422, 1, 0, 0, 0, 64, 429, 1, 0, 0, 0, 66, 443, 1, 0, 0, 0, 68, 452, 1, 0, 0, 0, 70, 456, 1, 0, 0, 0, 72, 458, 1, 0, 0, 0, 74, 464, 1, 0, 0, 0, 76, 471, 1, 0, 0, 0, 78, 481, 1, 0, 0, 0, 80, 486, 1, 0, 0, 0, 82, 496, 1, 0, 0, 0, 84, 501, 1, 0, 0, 0, 86, 511, 1, 0, 0, 0, 88, 514, 1, 0, 0, 0, 90, 528, 1, 0, 0, 0, 92, 536, 1, 0, 0, 0, 94, 544, 1, 0, 0, 0, 96, 553, 1, 0, 0, 0, 98, 559, 1, 0, 0, 0, 100, 571, 1, 0, 0, 0, 102, 579, 1, 0, 0, 0, 104, 591, 1, 0, 0, 0, 106, 596, 1, 0, 0, 0, 108, 609, 1, 0, 0, 0, 110, 622, 1, 0, 0, 0, 112, 635, 1, 0, 0, 0, 114, 642, 1, 0, 0, 0, 116, 647, 1, 0, 0, 0, 118, 652, 1, 0, 0, 0, 120, 122, 3, 2, 1, 0, 121, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 124, 129, 1, 0, 0, 0, 125, 127, 3, 6, 3, 0, 126, 125, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 129, 1, 0, 0, 0, 128, 121, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 5, 0, 0, 1, 131, 1, 1, 0, 0, 0, 132, 142, 5, 2, 0, 0, 133, 142, 3, 10, 5, 0, 134, 142, 3, 22, 11, 0, 135, 142, 3, 60, 30, 0, 136, 142, 3, 36, 18, 0, 137, 142, 3, 78, 39, 0, 138, 142, 3, 82, 41, 0, 139, 142, 3, 86, 43, 0, 140, 142, 3, 116, 58, 0, 141, 132, 1, 0, 0, 0, 141, 133, 1, 0, 0, 0, 141, 134, 1, 0, 0, 0, 141, 135, 1, 0, 0, 0, 141, 136, 1, 0, 0, 0, 141, 137, 1, 0, 0, 0, 141, 138, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 141, 140, 1, 0, 0, 0, 142, 3, 1, 0, 0, 0, 143, 145, 5, 1, 0, 0, 144, 143, 1, 0, 0, 0, 145, 148, 1, 0, 0, 0, 146, 144, 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 149, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 149, 150, 7, 0, 0, 0, 150, 5, 1, 0, 0, 0, 151, 153, 5, 5, 0, 0, 152, 154, 5, 2, 0, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 7, 1, 0, 0, 0, 155, 157, 7, 1, 0, 0, 156, 155, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 9, 1, 0, 0, 0, 160, 161, 3, 12, 6, 0, 161, 162, 3, 18, 9, 0, 162, 11, 1, 0, 0, 0, 163, 165, 5, 1, 0, 0, 164, 163, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 169, 173, 5, 7, 0, 0, 170, 172, 5, 1, 0, 0, 171, 170, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 176, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 3, 14, 7, 0, 177, 13, 1, 0, 0, 0, 178, 183, 3, 16, 8, 0, 179, 182, 5, 1, 0, 0, 180, 182, 3, 16, 8, 0, 181, 179, 1, 0, 0, 0, 181, 180, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 181, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 15, 1, 0, 0, 0, 185, 183, 1, 0, 0, 0, 186, 191, 5, 29, 0, 0, 187, 188, 5, 30, 0, 0, 188, 190, 5, 29, 0, 0, 189, 187, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 17, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 194, 196, 3, 20, 10, 0, 195, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 19, 1, 0, 0, 0, 199, 201, 5, 1, 0, 0, 200, 199, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 205, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 206, 5, 7, 0, 0, 206, 207, 3, 22, 11, 0, 207, 21, 1, 0, 0, 0, 208, 209, 3, 24, 12, 0, 209, 23, 1, 0, 0, 0, 210, 212, 3, 26, 13, 0, 211, 213, 3, 30, 15, 0, 212, 211, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 25, 1, 0, 0, 0, 214, 216, 5, 1, 0, 0, 215, 214, 1, 0, 0, 0, 216, 219, 1, 0, 0, 0, 217, 215, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 220, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 220, 222, 5, 7, 0, 0, 221, 223, 5, 7, 0, 0, 222, 221, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 227, 1, 0, 0, 0, 224, 226, 5, 1, 0, 0, 225, 224, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 230, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 3, 28, 14, 0, 231, 27, 1, 0, 0, 0, 232, 237, 3, 16, 8, 0, 233, 236, 5, 1, 0, 0, 234, 236, 3, 16, 8, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 239, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 29, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 240, 242, 5, 1, 0, 0, 241, 240, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 246, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 3, 32, 16, 0, 247, 31, 1, 0, 0, 0, 248, 250, 5, 1, 0, 0, 249, 248, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 258, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 255, 3, 34, 17, 0, 255, 256, 3, 4, 2, 0, 256, 259, 1, 0, 0, 0, 257, 259, 3, 8, 4, 0, 258, 254, 1, 0, 0, 0, 258, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 33, 1, 0, 0, 0, 262, 264, 5, 1, 0, 0, 263, 262, 1, 0, 0, 0, 264, 267, 1, 0, 0, 0, 265, 263, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 268, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 268, 272, 5, 8, 0, 0, 269, 271, 7, 2, 0, 0, 270, 269, 1, 0, 0, 0, 271, 274, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 35, 1, 0, 0, 0, 274, 272, 1, 0, 0, 0, 275, 276, 3, 38, 19, 0, 276, 37, 1, 0, 0, 0, 277, 279, 3, 42, 21, 0, 278, 280, 3, 40, 20, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 39, 1, 0, 0, 0, 281, 282, 3, 76, 38, 0, 282, 283, 3, 4, 2, 0, 283, 286, 1, 0, 0, 0, 284, 286, 3, 8, 4, 0, 285, 281, 1, 0, 0, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 41, 1, 0, 0, 0, 289, 291, 5, 1, 0, 0, 290, 289, 1, 0, 0, 0, 291, 294, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 1, 0, 0, 0, 294, 292, 1, 0, 0, 0, 295, 299, 5, 10, 0, 0, 296, 298, 5, 1, 0, 0, 297, 296, 1, 0, 0, 0, 298, 301, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 302, 304, 3, 48, 24, 0, 303, 302, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 308, 1, 0, 0, 0, 305, 307, 5, 1, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 313, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 314, 3, 56, 28, 0, 312, 314, 3, 58, 29, 0, 313, 311, 1, 0, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 318, 1, 0, 0, 0, 315, 317, 5, 1, 0, 0, 316, 315, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 321, 323, 3, 50, 25, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 327, 1, 0, 0, 0, 324, 326, 5, 1, 0, 0, 325, 324, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 332, 3, 52, 26, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 336, 1, 0, 0, 0, 333, 335, 5, 1, 0, 0, 334, 333, 1, 0, 0, 0, 335, 338, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 340, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 339, 341, 5, 18, 0, 0, 340, 339, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 345, 1, 0, 0, 0, 342, 344, 5, 1, 0, 0, 343, 342, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 350, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 351, 3, 44, 22, 0, 349, 351, 3, 46, 23, 0, 350, 348, 1, 0, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 353, 3, 4, 2, 0, 353, 43, 1, 0, 0, 0, 354, 355, 5, 24, 0, 0, 355, 45, 1, 0, 0, 0, 356, 357, 5, 25, 0, 0, 357, 47, 1, 0, 0, 0, 358, 359, 5, 22, 0, 0, 359, 49, 1, 0, 0, 0, 360, 362, 5, 20, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 366, 1, 0, 0, 0, 363, 365, 5, 1, 0, 0, 364, 363, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 370, 3, 54, 27, 0, 370, 51, 1, 0, 0, 0, 371, 375, 5, 21, 0, 0, 372, 374, 5, 1, 0, 0, 373, 372, 1, 0, 0, 0, 374, 377, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 378, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 378, 379, 3, 54, 27, 0, 379, 53, 1, 0, 0, 0, 380, 397, 7, 3, 0, 0, 381, 383, 5, 1, 0, 0, 382, 381, 1, 0, 0, 0, 383, 386, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 387, 1, 0, 0, 0, 386, 384, 1, 0, 0, 0, 387, 391, 5, 19, 0, 0, 388, 390, 5, 1, 0, 0, 389, 388, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 394, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 396, 7, 3, 0, 0, 395, 384, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 55, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 400, 408, 5, 26, 0, 0, 401, 403, 5, 1, 0, 0, 402, 401, 1, 0, 0, 0, 403, 406, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 407, 409, 5, 23, 0, 0, 408, 404, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 57, 1, 0, 0, 0, 410, 418, 5, 27, 0, 0, 411, 413, 5, 1, 0, 0, 412, 411, 1, 0, 0, 0, 413, 416, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 419, 5, 23, 0, 0, 418, 414, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 59, 1, 0, 0, 0, 420, 421, 3, 62, 31, 0, 421, 61, 1, 0, 0, 0, 422, 424, 3, 64, 32, 0, 423, 425, 3, 74, 37, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 63, 1, 0, 0, 0, 426, 428, 5, 1, 0, 0, 427, 426, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 432, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 434, 5, 9, 0, 0, 433, 435, 3, 66, 33, 0, 434, 433, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 437, 1, 0, 0, 0, 436, 438, 5, 38, 0, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 440, 1, 0, 0, 0, 439, 441, 3, 68, 34, 0, 440, 439, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 65, 1, 0, 0, 0, 442, 444, 7, 4, 0, 0, 443, 442, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 67, 1, 0, 0, 0, 447, 453, 3, 70, 35, 0, 448, 453, 3, 72, 36, 0, 449, 453, 5, 37, 0, 0, 450, 453, 5, 38, 0, 0, 451, 453, 5, 1, 0, 0, 452, 447, 1, 0, 0, 0, 452, 448, 1, 0, 0, 0, 452, 449, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 452, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 69, 1, 0, 0, 0, 456, 457, 5, 35, 0, 0, 457, 71, 1, 0, 0, 0, 458, 459, 5, 36, 0, 0, 459, 73, 1, 0, 0, 0, 460, 461, 3, 76, 38, 0, 461, 462, 3, 4, 2, 0, 462, 465, 1, 0, 0, 0, 463, 465, 3, 8, 4, 0, 464, 460, 1, 0, 0, 0, 464, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 75, 1, 0, 0, 0, 468, 470, 5, 1, 0, 0, 469, 468, 1, 0, 0, 0, 470, 473, 1, 0, 0, 0, 471, 469, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 474, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 474, 478, 5, 8, 0, 0, 475, 477, 7, 2, 0, 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 77, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 481, 482, 3, 80, 40, 0, 482, 79, 1, 0, 0, 0, 483, 485, 5, 1, 0, 0, 484, 483, 1, 0, 0, 0, 485, 488, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 489, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 489, 493, 5, 11, 0, 0, 490, 492, 5, 1, 0, 0, 491, 490, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 81, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 496, 497, 3, 84, 42, 0, 497, 83, 1, 0, 0, 0, 498, 500, 5, 1, 0, 0, 499, 498, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 504, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 508, 5, 12, 0, 0, 505, 507, 5, 1, 0, 0, 506, 505, 1, 0, 0, 0, 507, 510, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 85, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 511, 512, 3, 88, 44, 0, 512, 87, 1, 0, 0, 0, 513, 515, 3, 90, 45, 0, 514, 513, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 517, 1, 0, 0, 0, 516, 518, 3, 92, 46, 0, 517, 516, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 3, 94, 47, 0, 520, 521, 3, 98, 49, 0, 521, 523, 3, 104, 52, 0, 522, 524, 3, 108, 54, 0, 523, 522, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 89, 1, 0, 0, 0, 525, 527, 5, 1, 0, 0, 526, 525, 1, 0, 0, 0, 527, 530, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 531, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 5, 3, 0, 0, 532, 91, 1, 0, 0, 0, 533, 535, 5, 1, 0, 0, 534, 533, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 539, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 5, 14, 0, 0, 540, 93, 1, 0, 0, 0, 541, 543, 5, 1, 0, 0, 542, 541, 1, 0, 0, 0, 543, 546, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 547, 1, 0, 0, 0, 546, 544, 1, 0, 0, 0, 547, 548, 5, 6, 0, 0, 548, 549, 3, 96, 48, 0, 549, 95, 1, 0, 0, 0, 550, 552, 5, 40, 0, 0, 551, 550, 1, 0, 0, 0, 552, 555, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 97, 1, 0, 0, 0, 555, 553, 1, 0, 0, 0, 556, 558, 5, 1, 0, 0, 557, 556, 1, 0, 0, 0, 558, 561, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 568, 1, 0, 0, 0, 561, 559, 1, 0, 0, 0, 562, 563, 3, 100, 50, 0, 563, 564, 3, 4, 2, 0, 564, 567, 1, 0, 0, 0, 565, 567, 3, 102, 51, 0, 566, 562, 1, 0, 0, 0, 566, 565, 1, 0, 0, 0, 567, 570, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, 99, 1, 0, 0, 0, 570, 568, 1, 0, 0, 0, 571, 575, 5, 8, 0, 0, 572, 574, 7, 5, 0, 0, 573, 572, 1, 0, 0, 0, 574, 577, 1, 0, 0, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 101, 1, 0, 0, 0, 577, 575, 1, 0, 0, 0, 578, 580, 7, 1, 0, 0, 579, 578, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 103, 1, 0, 0, 0, 583, 585, 3, 106, 53, 0, 584, 583, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 592, 3, 114, 57, 0, 587, 589, 3, 114, 57, 0, 588, 590, 3, 106, 53, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 592, 1, 0, 0, 0, 591, 584, 1, 0, 0, 0, 591, 587, 1, 0, 0, 0, 592, 105, 1, 0, 0, 0, 593, 595, 5, 1, 0, 0, 594, 593, 1, 0, 0, 0, 595, 598, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 599, 602, 5, 13, 0, 0, 600, 603, 3, 110, 55, 0, 601, 603, 3, 112, 56, 0, 602, 600, 1, 0, 0, 0, 602, 601, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 107, 1, 0, 0, 0, 606, 608, 5, 1, 0, 0, 607, 606, 1, 0, 0, 0, 608, 611, 1, 0, 0, 0, 609, 607, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 612, 1, 0, 0, 0, 611, 609, 1, 0, 0, 0, 612, 615, 5, 16, 0, 0, 613, 616, 3, 110, 55, 0, 614, 616, 3, 112, 56, 0, 615, 613, 1, 0, 0, 0, 615, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 615, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 109, 1, 0, 0, 0, 619, 621, 5, 1, 0, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 629, 5, 8, 0, 0, 626, 628, 7, 5, 0, 0, 627, 626, 1, 0, 0, 0, 628, 631, 1, 0, 0, 0, 629, 627, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 632, 633, 3, 4, 2, 0, 633, 111, 1, 0, 0, 0, 634, 636, 7, 1, 0, 0, 635, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 113, 1, 0, 0, 0, 639, 641, 5, 1, 0, 0, 640, 639, 1, 0, 0, 0, 641, 644, 1, 0, 0, 0, 642, 640, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 645, 1, 0, 0, 0, 644, 642, 1, 0, 0, 0, 645, 646, 5, 15, 0, 0, 646, 115, 1, 0, 0, 0, 647, 648, 3, 118, 59, 0, 648, 117, 1, 0, 0, 0, 649, 651, 5, 1, 0, 0, 650, 649, 1, 0, 0, 0, 651, 654, 1, 0, 0, 0, 652, 650, 1, 0, 0, 0, 652, 653, 1, 0, 0, 0, 653, 655, 1, 0, 0, 0, 654, 652, 1, 0, 0, 0, 655, 656, 5, 4, 0, 0, 656, 119, 1, 0, 0, 0, 94, 123, 126, 128, 141, 146, 153, 158, 166, 173, 181, 183, 191, 197, 202, 212, 217, 222, 227, 235, 237, 243, 251, 258, 260, 265, 272, 279, 285, 287, 292, 299, 303, 308, 313, 318, 322, 327, 331, 336, 340, 345, 350, 361, 366, 375, 384, 391, 397, 404, 408, 414, 418, 424, 429, 434, 437, 440, 445, 452, 454, 464, 466, 471, 478, 486, 493, 501, 508, 514, 517, 523, 528, 536, 544, 553, 559, 566, 568, 575, 581, 584, 589, 591, 596, 602, 604, 609, 615, 617, 622, 629, 637, 642, 652] \ No newline at end of file diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 index 0e61614022..94403d2951 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileLexer.g4 @@ -54,7 +54,7 @@ MODEL_INFO ; COMMENT - : WS* '>' ~('\r'|'\n')* + : WS* '>' ~('\r'|'\n')* -> skip ; QNA diff --git a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 index e9876722f3..e654c29377 100644 --- a/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 +++ b/libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LUFileParser.g4 @@ -3,7 +3,7 @@ parser grammar LUFileParser; options { tokenVocab=LUFileLexer; } file - : paragraph+? EOF + : (paragraph+? | commentDefinition?) EOF ; paragraph @@ -16,7 +16,6 @@ paragraph | referenceSection | qnaSection | modelInfoSection - | commentDefinition ; // Treat EOF as newline to hanle file end gracefully @@ -79,7 +78,7 @@ intentBody ; normalIntentBody - : WS* ((normalIntentString newline) | errorString | commentDefinition)+ + : WS* ((normalIntentString newline) | errorString)+ ; normalIntentString diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json index 79c87b0fa4..e93dcb50d0 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Unix.json @@ -161,11 +161,11 @@ "errorMsgs": [ ], - "contextText": " - Please set {deviceTemperature = thermostat to 72}", + "contextText": "- Please set {deviceTemperature = thermostat to 72}", "range": { "Start": { "Line": 17, - "Character": 0 + "Character": 4 }, "End": { "Line": 17, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Windows.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/LU_Sections_Windows.json index f58d0dc4faaae394e4fb882e95623435b274013b..32dd6b2ae5a7ce6f1020a5976885942acde7e90e 100644 GIT binary patch delta 44 zcmV+{0Mq}Rlm?WP2C#@DlRyRpvy>w;0h90qAd?{WV3UX>K9|@*0iJ^*CbuFc0s3Qo CQxM(& delta 37 vcmV+=0NVeQlm?uX2C#@Dm(V`}442en0b-NxBhZ)dI{|`&Kqa?8B>~iAF7^+a diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json index 41bfee8909..4fb9dd3bd7 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU131.json @@ -52,7 +52,7 @@ "Severity": "ERROR" }, { - "Message": "syntax error: extraneous input 'ml' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, COMMENT, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", + "Message": "syntax error: extraneous input 'ml' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", "Range": { "Start": { "Line": 2, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json index ed8891d6e8..49e5287375 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU139.json @@ -52,7 +52,7 @@ "Severity": "ERROR" }, { - "Message": "syntax error: extraneous input 'regex' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, COMMENT, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", + "Message": "syntax error: extraneous input 'regex' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", "Range": { "Start": { "Line": 2, diff --git a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json index 2f560c31e2..2480fe39d9 100644 --- a/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json +++ b/tests/Parsers/Microsoft.Bot.Builder.Parsers.LU.Tests/Fixtures/testLU153.json @@ -37,7 +37,7 @@ "Severity": "ERROR" }, { - "Message": "syntax error: extraneous input 'abc' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, COMMENT, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", + "Message": "syntax error: extraneous input 'abc' expecting {, WS, NEWLINE, QNA_SOURCE_INFO, MODEL_INFO, QNA, HASH, '$', '@', IMPORT, REFERENCE, QNA_ID_MARK}", "Range": { "Start": { "Line": 2, From d4884bd64178ada4b95da3a861d158a5bb04a172 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Tue, 13 Feb 2024 08:16:40 -0600 Subject: [PATCH 25/26] create-botbuilder-parity-issues.yml permissions (#6748) --- .github/workflows/create-botbuilder-parity-issues.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/create-botbuilder-parity-issues.yml b/.github/workflows/create-botbuilder-parity-issues.yml index 784548d6bf..c24fdcf33f 100644 --- a/.github/workflows/create-botbuilder-parity-issues.yml +++ b/.github/workflows/create-botbuilder-parity-issues.yml @@ -45,6 +45,8 @@ jobs: runs-on: ubuntu-latest if: github.event.pull_request.merged == true needs: encode + permissions: + issues: write strategy: matrix: From 07ed900bb7326e85b8a277a10dcf78db0806ab2d Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Wed, 14 Feb 2024 09:59:43 -0600 Subject: [PATCH 26/26] Updated NuGet.Packaging (#6749) Co-authored-by: Tracy Boehrer --- .../Microsoft.Bot.Builder.Dialogs.Declarative.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj b/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj index b682d20135..a41a4a414a 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj @@ -38,7 +38,7 @@ - +