diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2015-01-28 12:13:31 +0300 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2015-01-28 12:13:31 +0300 |
commit | ea1c0ecf2cb0612728e32a065b363e28eeba2aac (patch) | |
tree | 5fb291cc5c788f31465fa0678e28818b9085e054 /ICSharpCode.NRefactory.CSharp | |
parent | 1e1f74edb04cfb5b95ccdf676d540af412c139ae (diff) |
Updated mcs (c#6 support).
Diffstat (limited to 'ICSharpCode.NRefactory.CSharp')
41 files changed, 9911 insertions, 7656 deletions
diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 158b86ce..8123e4c7 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -136,7 +136,17 @@ namespace ICSharpCode.NRefactory.CSharp void AddTypeArguments(ATypeNameExpression texpr, AstType result) { var unbound = texpr.TypeArguments as UnboundTypeArguments; - if (unbound != null) { + if (unbound != null) { + TextLocation ll = Convert (texpr.Location); + result.AddChild(new CSharpTokenNode(ll, Roles.LChevron), Roles.LChevron); + ll = new TextLocation (ll.Line, ll.Column + 1); + for (int j = 0; j < unbound.Count; j++) { + result.AddChild (new SimpleType (), Roles.TypeArgument); + result.AddChild(new CSharpTokenNode(ll, Roles.LChevron), Roles.Comma); + ll = new TextLocation (ll.Line, ll.Column + 1); + } + result.AddChild(new CSharpTokenNode(ll, Roles.RChevron), Roles.RChevron); + /* var loc2 = LocationsBag.GetLocations(texpr.TypeArguments); if (loc2 == null) return; @@ -150,7 +160,7 @@ namespace ICSharpCode.NRefactory.CSharp if (j < loc2.Count) { result.AddChild (new SimpleType (), Roles.TypeArgument); result.AddChild(new CSharpTokenNode(Convert(loc2 [j++]), Roles.RChevron), Roles.RChevron); - } + }*/ return; } if (texpr.TypeArguments == null || texpr.TypeArguments.Args == null) @@ -459,6 +469,18 @@ namespace ICSharpCode.NRefactory.CSharp AddToNamespace(ud); } + public override void Visit(UsingClause un) + { + var ud = new UsingDeclaration(); + var loc = LocationsBag.GetLocations(un); + ud.AddChild(new CSharpTokenNode(Convert(un.Location), UsingDeclaration.UsingKeywordRole), UsingDeclaration.UsingKeywordRole); + if (un.NamespaceExpression != null) + ud.AddChild(ConvertToType(un.NamespaceExpression), UsingDeclaration.ImportRole); + if (loc != null) + ud.AddChild(new CSharpTokenNode(Convert(loc [0]), Roles.Semicolon), Roles.Semicolon); + AddToNamespace(ud); + } + public override void Visit(UsingAliasNamespace uan) { var ud = new UsingAliasDeclaration(); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs index bd801f65..195ea758 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs @@ -100,7 +100,7 @@ namespace Mono.CompilerServices.SymbolWriter int parent = CurrentBlock != null ? CurrentBlock.Index : -1; CodeBlockEntry block = new CodeBlockEntry ( - _blocks.Count + 1, parent, type, start_offset); + _blocks.Count, parent, type, start_offset); _block_stack.Push (block); _blocks.Add (block); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs index e7f00378..1b9a8f21 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs @@ -353,7 +353,7 @@ namespace Mono.CSharp { hoisted_locals.Add (hoisted); } - if (ec.CurrentBlock.Explicit != localVariable.Block.Explicit && !(hoisted.Storey is StateMachine)) + if (ec.CurrentBlock.Explicit != localVariable.Block.Explicit && !(hoisted.Storey is StateMachine) && hoisted.Storey != null) hoisted.Storey.AddReferenceFromChildrenBlock (ec.CurrentBlock.Explicit); } @@ -1798,8 +1798,10 @@ namespace Mono.CSharp { // this argument is generated during compilation which speeds up dispatch // by about 25% // - method_parameters = ParametersCompiled.Prefix (method_parameters, - new Parameter (null, null, 0, null, loc), ec.Module.Compiler.BuiltinTypes.Object); + // Unused as it breaks compatibility + // + // method_parameters = ParametersCompiled.Prefix (method_parameters, + // new Parameter (null, null, 0, null, loc), ec.Module.Compiler.BuiltinTypes.Object); } if (storey == null && hoisted_tparams == null) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs index f93c0383..dd5af064 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs @@ -372,8 +372,6 @@ namespace Mono.CSharp vi_product = a.GetString (); } else if (a.Type == pa.AssemblyCompany) { vi_company = a.GetString (); - } else if (a.Type == pa.AssemblyDescription) { - // TODO: Needs extra api } else if (a.Type == pa.AssemblyCopyright) { vi_copyright = a.GetString (); } else if (a.Type == pa.AssemblyTrademark) { @@ -382,6 +380,12 @@ namespace Mono.CSharp has_user_debuggable = true; } + // + // Win32 version info attributes AssemblyDescription and AssemblyTitle cannot be + // set using public API and because we have blob like attributes we need to use + // special option DecodeVersionInfoAttributeBlobs to support values extraction + // + SetCustomAttribute (ctor, cdata); } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs index 2bdc3331..71675876 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs @@ -421,7 +421,13 @@ namespace Mono.CSharp { { source.FlowAnalysis (fc); - if (target is ArrayAccess || target is IndexerExpr || target is PropertyExpr) + if (target is ArrayAccess || target is IndexerExpr) { + target.FlowAnalysis (fc); + return; + } + + var pe = target as PropertyExpr; + if (pe != null && !pe.IsAutoPropertyAccess) target.FlowAnalysis (fc); } @@ -496,6 +502,12 @@ namespace Mono.CSharp { fe.SetFieldAssigned (fc); return; } + + var pe = target as PropertyExpr; + if (pe != null) { + pe.SetBackingFieldAssigned (fc); + return; + } } public override void MarkReachable (Reachability rc) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs index 68bbd3e1..ad437325 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs @@ -151,7 +151,7 @@ namespace Mono.CSharp public bool ProbingMode { get; set; } - protected override void Error_TypeDoesNotContainDefinition (ResolveContext rc, TypeSpec type, string name) + public override void Error_TypeDoesNotContainDefinition (ResolveContext rc, TypeSpec type, string name) { Error_OperatorCannotBeApplied (rc, type); } @@ -165,7 +165,7 @@ namespace Mono.CSharp if (invocation != null && invocation.MethodGroup != null && (invocation.MethodGroup.BestCandidate.Modifiers & Modifiers.ASYNC) != 0) { rc.Report.Error (4008, loc, "Cannot await void method `{0}'. Consider changing method return type to `Task'", invocation.GetSignatureForError ()); - } else { + } else if (type != InternalType.ErrorType) { rc.Report.Error (4001, loc, "Cannot await `{0}' expression", type.GetSignatureForError ()); } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs index 9e043749..93aeabf9 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs @@ -837,9 +837,9 @@ namespace Mono.CSharp { /// </summary> bool IsSecurityActionValid () { - SecurityAction action = GetSecurityActionValue (); + Constant c = null; + var action = GetSecurityActionValue (ref c); bool for_assembly = Target == AttributeTargets.Assembly || Target == AttributeTargets.Module; - var c = (Constant)pos_args [0].Expr; switch (action) { #pragma warning disable 618 @@ -860,6 +860,10 @@ namespace Mono.CSharp { return true; break; #pragma warning restore 618 + case null: + Report.Error (7048, loc, "First argument of a security attribute `{0}' must be a valid SecurityAction", + Type.GetSignatureForError ()); + return false; default: Report.Error (7049, c.Location, "Security attribute `{0}' has an invalid SecurityAction value `{1}'", @@ -881,9 +885,25 @@ namespace Mono.CSharp { return false; } - System.Security.Permissions.SecurityAction GetSecurityActionValue () + SecurityAction? GetSecurityActionValue (ref Constant value) { - return (SecurityAction) ((Constant) pos_args[0].Expr).GetValue (); + if (pos_args == null) { + var predefined = context.Module.PredefinedAttributes; + + // + // BCL defines System.Security.Permissions.HostProtectionAttribute with parameterless + // contructor which should not be valid but it's already part of the framework + // + if (Type == predefined.HostProtection.TypeSpec) { + value = new IntConstant (context.Module.Compiler.BuiltinTypes, (int)SecurityAction.LinkDemand, loc); + return SecurityAction.LinkDemand; + } + + return null; + } + + value = (Constant) pos_args [0].Expr; + return (SecurityAction) value.GetValue (); } /// <summary> @@ -893,9 +913,14 @@ namespace Mono.CSharp { public void ExtractSecurityPermissionSet (MethodSpec ctor, ref SecurityType permissions) { #if STATIC - object[] values = new object[pos_args.Count]; - for (int i = 0; i < values.Length; ++i) - values[i] = ((Constant) pos_args[i].Expr).GetValue (); + object[] values; + if (pos_args != null) { + values = new object[pos_args.Count]; + for (int i = 0; i < values.Length; ++i) + values[i] = ((Constant) pos_args[i].Expr).GetValue (); + } else { + values = null; + } PropertyInfo[] prop; object[] prop_values; @@ -1698,6 +1723,7 @@ namespace Mono.CSharp { public readonly PredefinedDebuggerBrowsableAttribute DebuggerBrowsable; public readonly PredefinedAttribute DebuggerStepThrough; public readonly PredefinedDebuggableAttribute Debuggable; + public readonly PredefinedAttribute HostProtection; // New in .NET 3.5 public readonly PredefinedAttribute Extension; @@ -1717,7 +1743,6 @@ namespace Mono.CSharp { public readonly PredefinedAttribute FieldOffset; public readonly PredefinedAttribute AssemblyProduct; public readonly PredefinedAttribute AssemblyCompany; - public readonly PredefinedAttribute AssemblyDescription; public readonly PredefinedAttribute AssemblyCopyright; public readonly PredefinedAttribute AssemblyTrademark; public readonly PredefinedAttribute CallerMemberNameAttribute; @@ -1753,6 +1778,7 @@ namespace Mono.CSharp { DefaultParameterValue = new PredefinedAttribute (module, "System.Runtime.InteropServices", "DefaultParameterValueAttribute"); OptionalParameter = new PredefinedAttribute (module, "System.Runtime.InteropServices", "OptionalAttribute"); UnverifiableCode = new PredefinedAttribute (module, "System.Security", "UnverifiableCodeAttribute"); + HostProtection = new PredefinedAttribute (module, "System.Security.Permissions", "HostProtectionAttribute"); DefaultCharset = new PredefinedAttribute (module, "System.Runtime.InteropServices", "DefaultCharSetAttribute"); TypeForwarder = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "TypeForwardedToAttribute"); @@ -1777,7 +1803,6 @@ namespace Mono.CSharp { FieldOffset = new PredefinedAttribute (module, "System.Runtime.InteropServices", "FieldOffsetAttribute"); AssemblyProduct = new PredefinedAttribute (module, "System.Reflection", "AssemblyProductAttribute"); AssemblyCompany = new PredefinedAttribute (module, "System.Reflection", "AssemblyCompanyAttribute"); - AssemblyDescription = new PredefinedAttribute (module, "System.Reflection", "AssemblyDescriptionAttribute"); AssemblyCopyright = new PredefinedAttribute (module, "System.Reflection", "AssemblyCopyrightAttribute"); AssemblyTrademark = new PredefinedAttribute (module, "System.Reflection", "AssemblyTrademarkAttribute"); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs index ae4c0276..3769d74b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs @@ -44,7 +44,6 @@ namespace Mono.CSharp public abstract class TypeContainer : MemberCore { public readonly MemberKind Kind; - public readonly string Basename; protected List<TypeContainer> containers; @@ -62,9 +61,6 @@ namespace Mono.CSharp : base (parent, name, attrs) { this.Kind = kind; - if (name != null) - this.Basename = name.Basename; - defined_names = new Dictionary<string, MemberCore> (); } @@ -111,7 +107,7 @@ namespace Mono.CSharp public virtual void AddPartial (TypeDefinition next_part) { MemberCore mc; - (PartialContainer ?? this).defined_names.TryGetValue (next_part.Basename, out mc); + (PartialContainer ?? this).defined_names.TryGetValue (next_part.MemberName.Basename, out mc); AddPartial (next_part, mc as TypeDefinition); } @@ -363,12 +359,8 @@ namespace Mono.CSharp return MemberName.GetSignatureForError (); } - public string GetSignatureForMetadata () + public virtual string GetSignatureForMetadata () { - if (Parent is TypeDefinition) { - return Parent.GetSignatureForMetadata () + "+" + TypeNameParser.Escape (MemberName.Basename); - } - var sb = new StringBuilder (); CreateMetadataName (sb); return sb.ToString (); @@ -380,7 +372,7 @@ namespace Mono.CSharp containers.Remove (cont); var tc = Parent == Module ? Module : this; - tc.defined_names.Remove (cont.Basename); + tc.defined_names.Remove (cont.MemberName.Basename); } public virtual void VerifyMembers () @@ -456,7 +448,7 @@ namespace Mono.CSharp return tc.GetSignatureForError (); } - public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + public ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) { return null; } @@ -795,7 +787,7 @@ namespace Mono.CSharp public override void AddTypeContainer (TypeContainer tc) { - AddNameToContainer (tc, tc.Basename); + AddNameToContainer (tc, tc.MemberName.Basename); base.AddTypeContainer (tc); } @@ -990,7 +982,7 @@ namespace Mono.CSharp } } - public virtual void RegisterFieldForInitialization (MemberCore field, FieldInitializer expression) + public void RegisterFieldForInitialization (MemberCore field, FieldInitializer expression) { if (IsPartialPart) PartialContainer.RegisterFieldForInitialization (field, expression); @@ -1003,6 +995,13 @@ namespace Mono.CSharp initialized_static_fields.Add (expression); } else { + if (Kind == MemberKind.Struct) { + if (Compiler.Settings.Version != LanguageVersion.Experimental) { + Report.Error (573, expression.Location, "'{0}': Structs cannot have instance property or field initializers", + GetSignatureForError ()); + } + } + if (initialized_fields == null) initialized_fields = new List<FieldInitializer> (4); @@ -1073,7 +1072,7 @@ namespace Mono.CSharp // // Field is re-initialized to its default value => removed // - if (fi.IsDefaultInitializer && ec.Module.Compiler.Settings.Optimize) + if (fi.IsDefaultInitializer && Kind != MemberKind.Struct && ec.Module.Compiler.Settings.Optimize) continue; ec.AssignmentInfoOffset += fi.AssignmentOffset; @@ -1146,6 +1145,15 @@ namespace Mono.CSharp } } + public override string GetSignatureForMetadata () + { + if (Parent is TypeDefinition) { + return Parent.GetSignatureForMetadata () + "+" + TypeNameParser.Escape (FilterNestedName (MemberName.Basename)); + } + + return base.GetSignatureForMetadata (); + } + public virtual void SetBaseTypes (List<FullNamedExpression> baseTypes) { type_bases = baseTypes; @@ -1318,7 +1326,7 @@ namespace Mono.CSharp CreateMetadataName (sb); TypeBuilder = Module.CreateBuilder (sb.ToString (), TypeAttr, type_size); } else { - TypeBuilder = parent_def.TypeBuilder.DefineNestedType (Basename, TypeAttr, null, type_size); + TypeBuilder = parent_def.TypeBuilder.DefineNestedType (FilterNestedName (MemberName.Basename), TypeAttr, null, type_size); } if (DeclaringAssembly.Importer != null) @@ -1348,6 +1356,18 @@ namespace Mono.CSharp return true; } + public static string FilterNestedName (string name) + { + // + // SRE API does not handle namespaces and types separately but + // determine that from '.' in name. That's problematic because + // dot is valid character for type name. By replacing any '.' + // in name we avoid any ambiguities and never emit metadata + // namespace for nested types + // + return name.Replace ('.', '_'); + } + string[] CreateTypeParameters (TypeParameters parentAllTypeParameters) { string[] names; @@ -1818,7 +1838,7 @@ namespace Mono.CSharp { base.RemoveContainer (cont); Members.Remove (cont); - Cache.Remove (cont.Basename); + Cache.Remove (cont.MemberName.Basename); } protected virtual bool DoResolveTypeParameters () @@ -2687,8 +2707,10 @@ namespace Mono.CSharp if (Kind == MemberKind.Class) c.Initializer = new GeneratedBaseInitializer (Location, PrimaryConstructorBaseArguments); - if (PrimaryConstructorParameters != null && !is_static) + if (PrimaryConstructorParameters != null && !is_static) { c.IsPrimaryConstructor = true; + c.caching_flags |= Flags.MethodOverloadsExist; + } AddConstructor (c, true); if (PrimaryConstructorBlock == null) { @@ -2707,6 +2729,7 @@ namespace Mono.CSharp CheckProtectedModifier (); if (PrimaryConstructorParameters != null) { + foreach (Parameter p in PrimaryConstructorParameters.FixedParameters) { if (p.Name == MemberName.Name) { Report.Error (8039, p.Location, "Primary constructor of type `{0}' has parameter of same name as containing type", @@ -3091,10 +3114,14 @@ namespace Mono.CSharp protected override bool DoDefineMembers () { - if (PrimaryConstructorParameters != null) + var res = base.DoDefineMembers (); + + if (PrimaryConstructorParameters != null || (initialized_fields != null && !HasUserDefaultConstructor ())) { generated_primary_constructor = DefineDefaultConstructor (false); + generated_primary_constructor.Define (); + } - return base.DoDefineMembers (); + return res; } public override void Emit () @@ -3104,14 +3131,14 @@ namespace Mono.CSharp base.Emit (); } - bool HasExplicitConstructor () + bool HasUserDefaultConstructor () { - foreach (var m in Members) { + foreach (var m in PartialContainer.Members) { var c = m as Constructor; if (c == null) continue; - if (!c.ParameterInfo.IsEmpty) + if (!c.IsStatic && c.ParameterInfo.IsEmpty) return true; } @@ -3170,18 +3197,6 @@ namespace Mono.CSharp base_type = Compiler.BuiltinTypes.ValueType; return ifaces; } - - public override void RegisterFieldForInitialization (MemberCore field, FieldInitializer expression) - { - if ((field.ModFlags & Modifiers.STATIC) == 0 && !HasExplicitConstructor ()) { - Report.Error (8054, field.Location, "`{0}': Structs without explicit constructors cannot contain members with initializers", - field.GetSignatureForError ()); - - return; - } - - base.RegisterFieldForInitialization (field, expression); - } } /// <summary> @@ -3727,7 +3742,7 @@ namespace Mono.CSharp public override string GetSignatureForDocumentation () { if (IsExplicitImpl) - return Parent.GetSignatureForDocumentation () + "." + InterfaceType.GetExplicitNameSignatureForDocumentation () + "#" + ShortName; + return Parent.GetSignatureForDocumentation () + "." + InterfaceType.GetSignatureForDocumentation (true) + "#" + ShortName; return Parent.GetSignatureForDocumentation () + "." + ShortName; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs index 55a061cf..6dfe7b6c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs @@ -222,6 +222,8 @@ namespace Mono.CSharp public List<TryFinally> TryFinallyUnwind { get; set; } + public Label RecursivePatternLabel { get; set; } + #endregion public void AddStatementEpilog (IExpressionCleanup cleanupExpression) @@ -547,13 +549,10 @@ namespace Mono.CSharp switch (type.BuiltinType) { case BuiltinTypeSpec.Type.Bool: // - // Workaround MSIL limitation. Load bool element as single bit, - // bool array can actually store any byte value + // bool array can actually store any byte value in underlying byte slot + // and C# spec does not specify any normalization rule, except the result + // is undefined // - ig.Emit (OpCodes.Ldelem_U1); - ig.Emit (OpCodes.Ldc_I4_0); - ig.Emit (OpCodes.Cgt_Un); - break; case BuiltinTypeSpec.Type.Byte: ig.Emit (OpCodes.Ldelem_U1); break; @@ -769,12 +768,8 @@ namespace Mono.CSharp ig.Emit (OpCodes.Ldind_U1); break; case BuiltinTypeSpec.Type.SByte: - ig.Emit (OpCodes.Ldind_I1); - break; case BuiltinTypeSpec.Type.Bool: ig.Emit (OpCodes.Ldind_I1); - ig.Emit (OpCodes.Ldc_I4_0); - ig.Emit (OpCodes.Cgt_Un); break; case BuiltinTypeSpec.Type.ULong: case BuiltinTypeSpec.Type.Long: @@ -1064,7 +1059,7 @@ namespace Mono.CSharp var ie = new InstanceEmitter (instance_copy, IsAddressCall (instance_copy, call_op, method.DeclaringType)); if (Arguments == null) { - ie.EmitLoad (ec); + ie.EmitLoad (ec, true); } } else if (!InstanceExpressionOnStack) { var ie = new InstanceEmitter (InstanceExpression, IsAddressCall (InstanceExpression, call_op, method.DeclaringType)); @@ -1226,7 +1221,7 @@ namespace Mono.CSharp instance_address = instance as LocalTemporary; if (instance_address == null) { - EmitLoad (ec); + EmitLoad (ec, false); ec.Emit (OpCodes.Dup); ec.EmitLoadFromPtr (instance.Type); @@ -1234,11 +1229,8 @@ namespace Mono.CSharp } else { instance.Emit (ec); } - - if (instance.Type.Kind == MemberKind.TypeParameter) - ec.Emit (OpCodes.Box, instance.Type); } else { - EmitLoad (ec); + EmitLoad (ec, !conditionalAccess); if (conditionalAccess) { conditional_access_dup = !IsInexpensiveLoad (); @@ -1248,6 +1240,9 @@ namespace Mono.CSharp } if (conditionalAccess) { + if (instance.Type.Kind == MemberKind.TypeParameter) + ec.Emit (OpCodes.Box, instance.Type); + ec.Emit (OpCodes.Brtrue_S, NullOperatorLabel); if (conditional_access_dup) @@ -1280,7 +1275,7 @@ namespace Mono.CSharp } } - public void EmitLoad (EmitContext ec) + public void EmitLoad (EmitContext ec, bool boxInstance) { var instance_type = instance.Type; @@ -1311,8 +1306,9 @@ namespace Mono.CSharp instance.Emit (ec); // Only to make verifier happy - if (RequiresBoxing ()) + if (boxInstance && RequiresBoxing ()) { ec.Emit (OpCodes.Box, instance_type); + } } public TypeSpec GetStackType (EmitContext ec) @@ -1340,6 +1336,9 @@ namespace Mono.CSharp return false; } + // + // Returns true for cheap race-free load, where we can avoid using dup + // bool IsInexpensiveLoad () { if (instance is Constant) @@ -1349,8 +1348,10 @@ namespace Mono.CSharp return false; var vr = instance as VariableReference; - if (vr != null) - return !vr.IsRef; + if (vr != null) { + // Load from captured local would be racy without dup + return !vr.IsRef && !vr.IsHoisted; + } if (instance is LocalTemporary) return true; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs index 3504302d..749c4efc 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs @@ -142,7 +142,7 @@ namespace Mono.CSharp { } if (targs != null) { - if (!targs.Resolve (rc)) + if (!targs.Resolve (rc, true)) return null; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs index a50baacc..31c2c3f4 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs @@ -60,7 +60,7 @@ namespace Mono.CSharp { public override void Error_ValueCannotBeConverted (ResolveContext ec, TypeSpec target, bool expl) { - if (!expl && IsLiteral && + if (!expl && IsLiteral && type.BuiltinType != BuiltinTypeSpec.Type.Double && BuiltinTypeSpec.IsPrimitiveTypeOrDecimal (target) && BuiltinTypeSpec.IsPrimitiveTypeOrDecimal (type)) { ec.Report.Error (31, loc, "Constant value `{0}' cannot be converted to a `{1}'", @@ -2150,6 +2150,11 @@ namespace Mono.CSharp { this.name = name; } + static void Error_MethodGroupWithTypeArguments (ResolveContext rc, Location loc) + { + rc.Report.Error (8084, loc, "An argument to nameof operator cannot be method group with type arguments"); + } + protected override Expression DoResolve (ResolveContext rc) { throw new NotSupportedException (); @@ -2164,66 +2169,81 @@ namespace Mono.CSharp { if (rc.Module.Compiler.Settings.Version < LanguageVersion.V_6) rc.Report.FeatureIsNotAvailable (rc.Module.Compiler, Location, "nameof operator"); - if (sn.HasTypeArguments) { - // TODO: csc compatible but unhelpful error message - rc.Report.Error (1001, loc, "Identifier expected"); - return true; + var res = sn.LookupNameExpression (rc, MemberLookupRestrictions.IgnoreAmbiguity | MemberLookupRestrictions.NameOfExcluded); + if (sn.HasTypeArguments && res is MethodGroupExpr) { + Error_MethodGroupWithTypeArguments (rc, expr.Location); } - sn.LookupNameExpression (rc, MemberLookupRestrictions.IgnoreArity | MemberLookupRestrictions.IgnoreAmbiguity); return true; } var ma = expr as MemberAccess; if (ma != null) { - FullNamedExpression fne = ma.LeftExpression as ATypeNameExpression; - if (fne == null) { - var qam = ma as QualifiedAliasMember; - if (qam == null) - return false; - - fne = qam.CreateExpressionFromAlias (rc); - if (fne == null) - return true; - } + var lexpr = ma.LeftExpression; - Value = ma.Name; + var res = ma.LookupNameExpression (rc, MemberLookupRestrictions.IgnoreAmbiguity); + + if (res == null) { + return false; + } if (rc.Module.Compiler.Settings.Version < LanguageVersion.V_6) rc.Report.FeatureIsNotAvailable (rc.Module.Compiler, Location, "nameof operator"); - if (ma.HasTypeArguments) { - // TODO: csc compatible but unhelpful error message - rc.Report.Error (1001, loc, "Identifier expected"); - return true; - } - - var left = fne.ResolveAsTypeOrNamespace (rc, true); - if (left == null) - return true; - - var ns = left as NamespaceExpression; - if (ns != null) { - FullNamedExpression retval = ns.LookupTypeOrNamespace (rc, ma.Name, 0, LookupMode.NameOf, loc); - if (retval == null) - ns.Error_NamespaceDoesNotExist (rc, ma.Name, 0); - - return true; + if (ma is QualifiedAliasMember) { + rc.Report.Error (8083, loc, "An alias-qualified name is not an expression"); + return false; } - if (left.Type.IsGenericOrParentIsGeneric && left.Type.GetDefinition () != left.Type) { - rc.Report.Error (8071, loc, "Type arguments are not allowed in the nameof operator"); + if (!IsLeftExpressionValid (lexpr)) { + rc.Report.Error (8082, lexpr.Location, "An argument to nameof operator cannot include sub-expression"); + return false; } - var mexpr = MemberLookup (rc, false, left.Type, ma.Name, 0, MemberLookupRestrictions.IgnoreArity | MemberLookupRestrictions.IgnoreAmbiguity, loc); - if (mexpr == null) { - ma.Error_IdentifierNotFound (rc, left.Type); - return true; + var mg = res as MethodGroupExpr; + if (mg != null) { + var emg = res as ExtensionMethodGroupExpr; + if (emg != null && !emg.ResolveNameOf (rc, ma)) { + return true; + } + + if (!mg.HasAccessibleCandidate (rc)) { + ErrorIsInaccesible (rc, ma.GetSignatureForError (), loc); + } + + if (ma.HasTypeArguments) { + Error_MethodGroupWithTypeArguments (rc, ma.Location); + } } + Value = ma.Name; return true; } + rc.Report.Error (8081, loc, "Expression does not have a name"); + return false; + } + + static bool IsLeftExpressionValid (Expression expr) + { + if (expr is SimpleName) + return true; + + if (expr is This) + return true; + + if (expr is NamespaceExpression) + return true; + + if (expr is TypeExpr) + return true; + + var ma = expr as MemberAccess; + if (ma != null) { + // TODO: Will conditional access be allowed? + return IsLeftExpressionValid (ma.LeftExpression); + } + return false; } @@ -2237,7 +2257,6 @@ namespace Mono.CSharp { var arg = args [0]; var res = ResolveArgumentExpression (rc, arg.Expr); if (!res) { - name.Error_NameDoesNotExist (rc); return null; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs index 230aa125..88e52370 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs @@ -22,8 +22,7 @@ namespace Mono.CSharp { Normal = 0, Probing = 1, - IgnoreAccessibility = 2, - NameOf = 3 + IgnoreAccessibility = 2 } // @@ -56,7 +55,7 @@ namespace Mono.CSharp string GetSignatureForError (); - ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity); + ExtensionMethodCandidates LookupExtensionMethod (string name, int arity); FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc); FullNamedExpression LookupNamespaceAlias (string name); } @@ -425,9 +424,9 @@ namespace Mono.CSharp return MemberContext.GetSignatureForError (); } - public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + public ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) { - return MemberContext.LookupExtensionMethod (extensionType, name, arity); + return MemberContext.LookupExtensionMethod (name, arity); } public FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc) @@ -464,7 +463,7 @@ namespace Mono.CSharp public DefiniteAssignmentBitSet DefiniteAssignmentOnFalse { get; set; } - public List<LabeledStatement> LabelStack { get; set; } + Dictionary<Statement, List<DefiniteAssignmentBitSet>> LabelStack { get; set; } public ParametersBlock ParametersBlock { get; set; } @@ -480,12 +479,48 @@ namespace Mono.CSharp public bool UnreachableReported { get; set; } + public bool AddReachedLabel (Statement label) + { + List<DefiniteAssignmentBitSet> das; + if (LabelStack == null) { + LabelStack = new Dictionary<Statement, List<DefiniteAssignmentBitSet>> (); + das = null; + } else { + LabelStack.TryGetValue (label, out das); + } + + if (das == null) { + das = new List<DefiniteAssignmentBitSet> (); + das.Add (new DefiniteAssignmentBitSet (DefiniteAssignment)); + LabelStack.Add (label, das); + return false; + } + + foreach (var existing in das) { + if (DefiniteAssignmentBitSet.AreEqual (existing, DefiniteAssignment)) + return true; + } + + if (DefiniteAssignment == DefiniteAssignmentBitSet.Empty) + das.Add (DefiniteAssignment); + else + das.Add (new DefiniteAssignmentBitSet (DefiniteAssignment)); + + return false; + } + public DefiniteAssignmentBitSet BranchDefiniteAssignment () { - var dat = DefiniteAssignment; - if (dat != DefiniteAssignmentBitSet.Empty) - DefiniteAssignment = new DefiniteAssignmentBitSet (dat); - return dat; + return BranchDefiniteAssignment (DefiniteAssignment); + } + + public DefiniteAssignmentBitSet BranchDefiniteAssignment (DefiniteAssignmentBitSet da) + { + if (da != DefiniteAssignmentBitSet.Empty) { + DefiniteAssignment = new DefiniteAssignmentBitSet (da); + } + + return da; } public void BranchConditionalAccessDefiniteAssignment () diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs index 065c9a7e..95f9897c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs @@ -1472,6 +1472,12 @@ namespace Mono.CSharp { if (expr_type.IsStruct && TypeSpecComparer.IsEqual (expr_type, target_type)) return expr_type == target_type ? expr : EmptyCast.Create (expr, target_type); + var interpolated_string = expr as InterpolatedString; + if (interpolated_string != null) { + if (target_type == ec.Module.PredefinedTypes.IFormattable.TypeSpec || target_type == ec.Module.PredefinedTypes.FormattableString.TypeSpec) + return interpolated_string.ConvertTo (ec, target_type); + } + return null; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index 868c1394..b0ef94f9 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -213,9 +213,11 @@ namespace Mono.CSharp //t "using_directives : using_directive", //t "using_directives : using_directives using_directive", //t "using_directive : using_namespace", -//t "using_namespace : USING namespace_or_type_expr SEMICOLON", -//t "using_namespace : USING IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON", +//t "using_namespace : USING opt_static namespace_or_type_expr SEMICOLON", +//t "using_namespace : USING opt_static IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON", //t "using_namespace : USING error", +//t "opt_static :", +//t "opt_static : STATIC", //t "$$2 :", //t "$$3 :", //t "namespace_declaration : opt_attributes NAMESPACE namespace_name $$2 OPEN_BRACE $$3 opt_extern_alias_directives opt_using_directives opt_namespace_or_type_declarations CLOSE_BRACE opt_semicolon_error", @@ -277,7 +279,8 @@ namespace Mono.CSharp //t "positional_or_named_argument : error", //t "$$7 :", //t "named_attribute_argument : IDENTIFIER ASSIGN $$7 expression", -//t "named_argument : identifier_inside_body COLON opt_named_modifier expression_or_error", +//t "named_argument : identifier_inside_body COLON opt_named_modifier named_argument_expr", +//t "named_argument_expr : expression_or_error", //t "opt_named_modifier :", //t "opt_named_modifier : REF", //t "opt_named_modifier : OUT", @@ -475,6 +478,7 @@ namespace Mono.CSharp //t "overloadable_operator : OP_LT", //t "overloadable_operator : OP_GE", //t "overloadable_operator : OP_LE", +//t "overloadable_operator : IS", //t "$$45 :", //t "conversion_operator_declarator : IMPLICIT OPERATOR type OPEN_PARENS $$45 opt_formal_parameter_list CLOSE_PARENS", //t "$$46 :", @@ -617,7 +621,7 @@ namespace Mono.CSharp //t "integral_type : LONG", //t "integral_type : ULONG", //t "integral_type : CHAR", -//t "primary_expression : primary_expression_or_type", +//t "primary_expression : type_name_expression", //t "primary_expression : literal", //t "primary_expression : array_creation_expression", //t "primary_expression : parenthesized_expression", @@ -637,14 +641,25 @@ namespace Mono.CSharp //t "primary_expression : pointer_member_access", //t "primary_expression : anonymous_method_expression", //t "primary_expression : undocumented_expressions", -//t "primary_expression_or_type : simple_name_expr", -//t "primary_expression_or_type : IDENTIFIER GENERATE_COMPLETION", -//t "primary_expression_or_type : member_access", +//t "primary_expression : interpolated_string", +//t "type_name_expression : simple_name_expr", +//t "type_name_expression : IDENTIFIER GENERATE_COMPLETION", +//t "type_name_expression : member_access", //t "literal : boolean_literal", //t "literal : LITERAL", //t "literal : NULL", //t "boolean_literal : TRUE", //t "boolean_literal : FALSE", +//t "interpolated_string : INTERPOLATED_STRING interpolations INTERPOLATED_STRING_END", +//t "interpolated_string : INTERPOLATED_STRING_END", +//t "interpolations : interpolation", +//t "interpolations : interpolations INTERPOLATED_STRING interpolation", +//t "interpolation : expression", +//t "interpolation : expression COMMA expression", +//t "$$68 :", +//t "interpolation : expression COLON $$68 LITERAL", +//t "$$69 :", +//t "interpolation : expression COMMA expression COLON $$69 LITERAL", //t "open_parens_any : OPEN_PARENS", //t "open_parens_any : OPEN_PARENS_CAST", //t "close_parens : CLOSE_PARENS", @@ -696,9 +711,14 @@ namespace Mono.CSharp //t "argument_or_named_argument : argument", //t "argument_or_named_argument : named_argument", //t "non_simple_argument : REF variable_reference", +//t "non_simple_argument : REF declaration_expression", //t "non_simple_argument : OUT variable_reference", +//t "non_simple_argument : OUT declaration_expression", //t "non_simple_argument : ARGLIST OPEN_PARENS argument_list CLOSE_PARENS", //t "non_simple_argument : ARGLIST OPEN_PARENS CLOSE_PARENS", +//t "declaration_expression : OPEN_PARENS declaration_expression CLOSE_PARENS", +//t "declaration_expression : variable_type identifier_inside_body", +//t "declaration_expression : variable_type identifier_inside_body ASSIGN expression", //t "variable_reference : expression", //t "element_access : primary_expression OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", //t "element_access : primary_expression INTERR_OPERATOR OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", @@ -722,8 +742,8 @@ namespace Mono.CSharp //t "array_creation_expression : NEW rank_specifier array_initializer", //t "array_creation_expression : NEW new_expr_type OPEN_BRACKET CLOSE_BRACKET OPEN_BRACKET_EXPR error CLOSE_BRACKET", //t "array_creation_expression : NEW new_expr_type error", -//t "$$68 :", -//t "new_expr_type : $$68 simple_type", +//t "$$70 :", +//t "new_expr_type : $$70 simple_type", //t "anonymous_type_expression : NEW OPEN_BRACE anonymous_type_parameters_opt_comma CLOSE_BRACE", //t "anonymous_type_expression : NEW OPEN_BRACE GENERATE_COMPLETION", //t "anonymous_type_parameters_opt_comma : anonymous_type_parameters_opt", @@ -764,14 +784,14 @@ namespace Mono.CSharp //t "unchecked_expression : UNCHECKED open_parens_any expression CLOSE_PARENS", //t "unchecked_expression : UNCHECKED error", //t "pointer_member_access : primary_expression OP_PTR IDENTIFIER opt_type_argument_list", -//t "$$69 :", -//t "anonymous_method_expression : DELEGATE opt_anonymous_method_signature $$69 block", -//t "$$70 :", -//t "anonymous_method_expression : ASYNC DELEGATE opt_anonymous_method_signature $$70 block", +//t "$$71 :", +//t "anonymous_method_expression : DELEGATE opt_anonymous_method_signature $$71 block", +//t "$$72 :", +//t "anonymous_method_expression : ASYNC DELEGATE opt_anonymous_method_signature $$72 block", //t "opt_anonymous_method_signature :", //t "opt_anonymous_method_signature : anonymous_method_signature", -//t "$$71 :", -//t "anonymous_method_signature : OPEN_PARENS $$71 opt_formal_parameter_list CLOSE_PARENS", +//t "$$73 :", +//t "anonymous_method_signature : OPEN_PARENS $$73 opt_formal_parameter_list CLOSE_PARENS", //t "default_value_expression : DEFAULT open_parens_any type CLOSE_PARENS", //t "unary_expression : primary_expression", //t "unary_expression : BANG prefixed_unary_expression", @@ -808,20 +828,35 @@ namespace Mono.CSharp //t "additive_expression : additive_expression PLUS error", //t "additive_expression : additive_expression MINUS error", //t "additive_expression : additive_expression AS type", -//t "additive_expression : additive_expression IS is_match_expr opt_identifier", +//t "additive_expression : additive_expression IS pattern_type_expr opt_identifier", +//t "additive_expression : additive_expression IS pattern_expr", //t "additive_expression : additive_expression AS error", //t "additive_expression : additive_expression IS error", //t "additive_expression : AWAIT IS type", //t "additive_expression : AWAIT AS type", -//t "is_match_expr : match_type", -//t "is_match_expr : match_type rank_specifiers", -//t "is_match_expr : literal", -//t "is_match_expr : PLUS prefixed_unary_expression", -//t "is_match_expr : MINUS prefixed_unary_expression", -//t "match_type : primary_expression_or_type opt_nullable", -//t "match_type : primary_expression_or_type pointer_stars", -//t "match_type : builtin_type_expression", -//t "match_type : void_invalid", +//t "pattern_type_expr : variable_type", +//t "pattern_expr : literal", +//t "pattern_expr : PLUS prefixed_unary_expression", +//t "pattern_expr : MINUS prefixed_unary_expression", +//t "pattern_expr : sizeof_expression", +//t "pattern_expr : default_value_expression", +//t "pattern_expr : OPEN_PARENS_CAST type CLOSE_PARENS prefixed_unary_expression", +//t "pattern_expr : STAR", +//t "pattern_expr : pattern_expr_invocation", +//t "pattern_expr : pattern_property", +//t "pattern_expr_invocation : type_name_expression OPEN_PARENS opt_pattern_list CLOSE_PARENS", +//t "pattern_property : type_name_expression OPEN_BRACE pattern_property_list CLOSE_BRACE", +//t "pattern_property_list : pattern_property_entry", +//t "pattern_property_list : pattern_property_list COMMA pattern_property_entry", +//t "pattern_property_entry : identifier_inside_body IS pattern", +//t "pattern : pattern_expr", +//t "pattern : pattern_type_expr opt_identifier", +//t "opt_pattern_list :", +//t "opt_pattern_list : pattern_list", +//t "pattern_list : pattern_argument", +//t "pattern_list : pattern_list COMMA pattern_argument", +//t "pattern_argument : pattern", +//t "pattern_argument : IDENTIFIER COLON pattern", //t "shift_expression : additive_expression", //t "shift_expression : shift_expression OP_SHIFT_LEFT additive_expression", //t "shift_expression : shift_expression OP_SHIFT_RIGHT additive_expression", @@ -882,24 +917,24 @@ namespace Mono.CSharp //t "lambda_parameter : AWAIT", //t "opt_lambda_parameter_list :", //t "opt_lambda_parameter_list : lambda_parameter_list", -//t "$$72 :", -//t "lambda_expression_body : $$72 expression", +//t "$$74 :", +//t "lambda_expression_body : $$74 expression", //t "lambda_expression_body : block", //t "lambda_expression_body : error", //t "expression_or_error : expression", //t "expression_or_error : error", -//t "$$73 :", -//t "lambda_expression : IDENTIFIER ARROW $$73 lambda_expression_body", -//t "$$74 :", -//t "lambda_expression : AWAIT ARROW $$74 lambda_expression_body", //t "$$75 :", -//t "lambda_expression : ASYNC identifier_inside_body ARROW $$75 lambda_expression_body", +//t "lambda_expression : IDENTIFIER ARROW $$75 lambda_expression_body", //t "$$76 :", +//t "lambda_expression : AWAIT ARROW $$76 lambda_expression_body", //t "$$77 :", -//t "lambda_expression : OPEN_PARENS_LAMBDA $$76 opt_lambda_parameter_list CLOSE_PARENS ARROW $$77 lambda_expression_body", +//t "lambda_expression : ASYNC identifier_inside_body ARROW $$77 lambda_expression_body", //t "$$78 :", //t "$$79 :", -//t "lambda_expression : ASYNC OPEN_PARENS_LAMBDA $$78 opt_lambda_parameter_list CLOSE_PARENS ARROW $$79 lambda_expression_body", +//t "lambda_expression : OPEN_PARENS_LAMBDA $$78 opt_lambda_parameter_list CLOSE_PARENS ARROW $$79 lambda_expression_body", +//t "$$80 :", +//t "$$81 :", +//t "lambda_expression : ASYNC OPEN_PARENS_LAMBDA $$80 opt_lambda_parameter_list CLOSE_PARENS ARROW $$81 lambda_expression_body", //t "expression : assignment_expression", //t "expression : non_assignment_expression", //t "non_assignment_expression : conditional_expression", @@ -918,13 +953,13 @@ namespace Mono.CSharp //t "opt_primary_parameters_with_class_base : class_base", //t "opt_primary_parameters_with_class_base : primary_parameters", //t "opt_primary_parameters_with_class_base : primary_parameters class_base", -//t "$$80 :", -//t "opt_primary_parameters_with_class_base : primary_parameters class_base OPEN_PARENS $$80 opt_argument_list CLOSE_PARENS", -//t "$$81 :", //t "$$82 :", +//t "opt_primary_parameters_with_class_base : primary_parameters class_base OPEN_PARENS $$82 opt_argument_list CLOSE_PARENS", //t "$$83 :", //t "$$84 :", -//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$81 type_declaration_name $$82 opt_primary_parameters_with_class_base opt_type_parameter_constraints_clauses $$83 OPEN_BRACE opt_class_member_declarations CLOSE_BRACE $$84 opt_semicolon", +//t "$$85 :", +//t "$$86 :", +//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$83 type_declaration_name $$84 opt_primary_parameters_with_class_base opt_type_parameter_constraints_clauses $$85 OPEN_BRACE opt_class_member_declarations CLOSE_BRACE $$86 opt_semicolon", //t "opt_partial :", //t "opt_partial : PARTIAL", //t "opt_modifiers :", @@ -966,15 +1001,15 @@ namespace Mono.CSharp //t "opt_type_parameter_variance : type_parameter_variance", //t "type_parameter_variance : OUT", //t "type_parameter_variance : IN", -//t "$$85 :", -//t "block : OPEN_BRACE $$85 opt_statement_list block_end", +//t "$$87 :", +//t "block : OPEN_BRACE $$87 opt_statement_list block_end", //t "block_end : CLOSE_BRACE", //t "block_end : COMPLETE_COMPLETION", -//t "$$86 :", -//t "block_prepared : OPEN_BRACE $$86 opt_statement_list CLOSE_BRACE", +//t "$$88 :", +//t "block_prepared : OPEN_BRACE $$88 opt_statement_list CLOSE_BRACE", //t "block_prepared : CLOSE_BRACE", -//t "$$87 :", -//t "block_prepared_strict : OPEN_BRACE $$87 opt_statement_list CLOSE_BRACE", +//t "$$89 :", +//t "block_prepared_strict : OPEN_BRACE $$89 opt_statement_list CLOSE_BRACE", //t "opt_statement_list :", //t "opt_statement_list : statement_list", //t "statement_list : statement", @@ -1020,12 +1055,12 @@ namespace Mono.CSharp //t "embedded_statement : labeled_statement", //t "embedded_statement : error", //t "empty_statement : SEMICOLON", -//t "$$88 :", -//t "labeled_statement : identifier_inside_body COLON $$88 statement", +//t "$$90 :", +//t "labeled_statement : identifier_inside_body COLON $$90 statement", //t "variable_type : variable_type_simple", //t "variable_type : variable_type_simple rank_specifiers", -//t "variable_type_simple : primary_expression_or_type opt_nullable", -//t "variable_type_simple : primary_expression_or_type pointer_stars", +//t "variable_type_simple : type_name_expression opt_nullable", +//t "variable_type_simple : type_name_expression pointer_stars", //t "variable_type_simple : builtin_type_expression", //t "variable_type_simple : void_invalid", //t "pointer_stars : pointer_star", @@ -1033,10 +1068,10 @@ namespace Mono.CSharp //t "pointer_star : STAR", //t "identifier_inside_body : IDENTIFIER", //t "identifier_inside_body : AWAIT", -//t "$$89 :", -//t "block_variable_declaration : variable_type identifier_inside_body $$89 opt_local_variable_initializer opt_variable_declarators semicolon_or_handle_error_close_brace", -//t "$$90 :", -//t "block_variable_declaration : CONST variable_type identifier_inside_body $$90 const_variable_initializer opt_const_declarators SEMICOLON", +//t "$$91 :", +//t "block_variable_declaration : variable_type identifier_inside_body $$91 opt_local_variable_initializer opt_variable_declarators semicolon_or_handle_error_close_brace", +//t "$$92 :", +//t "block_variable_declaration : CONST variable_type identifier_inside_body $$92 const_variable_initializer opt_const_declarators SEMICOLON", //t "semicolon_or_handle_error_close_brace : SEMICOLON", //t "semicolon_or_handle_error_close_brace : CLOSE_BRACE", //t "opt_local_variable_initializer :", @@ -1073,8 +1108,8 @@ namespace Mono.CSharp //t "if_statement : IF open_parens_any boolean_expression CLOSE_PARENS embedded_statement", //t "if_statement : IF open_parens_any boolean_expression CLOSE_PARENS embedded_statement ELSE embedded_statement", //t "if_statement : IF open_parens_any boolean_expression error", -//t "$$91 :", -//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$91 opt_switch_sections CLOSE_BRACE", +//t "$$93 :", +//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$93 opt_switch_sections CLOSE_BRACE", //t "switch_statement : SWITCH open_parens_any expression error", //t "opt_switch_sections :", //t "opt_switch_sections : switch_sections", @@ -1096,20 +1131,20 @@ namespace Mono.CSharp //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON", //t "do_statement : DO embedded_statement error", //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression error", -//t "$$92 :", -//t "for_statement : FOR open_parens_any $$92 for_statement_cont", -//t "$$93 :", -//t "for_statement_cont : opt_for_initializer SEMICOLON $$93 for_statement_condition", -//t "for_statement_cont : opt_for_initializer CLOSE_PARENS", //t "$$94 :", -//t "for_statement_condition : opt_for_condition SEMICOLON $$94 for_statement_end", +//t "for_statement : FOR open_parens_any $$94 for_statement_cont", +//t "$$95 :", +//t "for_statement_cont : opt_for_initializer SEMICOLON $$95 for_statement_condition", +//t "for_statement_cont : opt_for_initializer CLOSE_PARENS", +//t "$$96 :", +//t "for_statement_condition : opt_for_condition SEMICOLON $$96 for_statement_end", //t "for_statement_condition : boolean_expression CLOSE_PARENS", //t "for_statement_end : opt_for_iterator CLOSE_PARENS embedded_statement", //t "for_statement_end : error", //t "opt_for_initializer :", //t "opt_for_initializer : for_initializer", -//t "$$95 :", -//t "for_initializer : variable_type identifier_inside_body $$95 opt_local_variable_initializer opt_variable_declarators", +//t "$$97 :", +//t "for_initializer : variable_type identifier_inside_body $$97 opt_local_variable_initializer opt_variable_declarators", //t "for_initializer : statement_expression_list", //t "opt_for_condition :", //t "opt_for_condition : boolean_expression", @@ -1120,8 +1155,8 @@ namespace Mono.CSharp //t "statement_expression_list : statement_expression_list COMMA statement_expression", //t "foreach_statement : FOREACH open_parens_any type error", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", -//t "$$96 :", -//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$96 embedded_statement", +//t "$$98 :", +//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$98 embedded_statement", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", //t "foreach_statement : FOREACH open_parens_any type error", //t "jump_statement : break_statement", @@ -1156,24 +1191,26 @@ namespace Mono.CSharp //t "opt_identifier :", //t "opt_identifier : identifier_inside_body", //t "catch_clause : CATCH opt_catch_filter block", -//t "$$97 :", -//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS $$97 opt_catch_filter block_prepared", +//t "$$99 :", +//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS $$99 opt_catch_filter_or_error", //t "catch_clause : CATCH open_parens_any error", -//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS error", +//t "opt_catch_filter_or_error : opt_catch_filter block_prepared", +//t "opt_catch_filter_or_error : error", //t "opt_catch_filter :", -//t "opt_catch_filter : IF open_parens_any expression CLOSE_PARENS", +//t "$$100 :", +//t "opt_catch_filter : WHEN $$100 open_parens_any expression CLOSE_PARENS", //t "checked_statement : CHECKED block", //t "unchecked_statement : UNCHECKED block", -//t "$$98 :", -//t "unsafe_statement : UNSAFE $$98 block", +//t "$$101 :", +//t "unsafe_statement : UNSAFE $$101 block", //t "lock_statement : LOCK open_parens_any expression CLOSE_PARENS embedded_statement", //t "lock_statement : LOCK open_parens_any expression error", -//t "$$99 :", -//t "$$100 :", -//t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$99 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$100 embedded_statement", -//t "$$101 :", //t "$$102 :", -//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$101 using_initialization CLOSE_PARENS $$102 embedded_statement", +//t "$$103 :", +//t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$102 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$103 embedded_statement", +//t "$$104 :", +//t "$$105 :", +//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$104 using_initialization CLOSE_PARENS $$105 embedded_statement", //t "using_statement : USING open_parens_any expression CLOSE_PARENS embedded_statement", //t "using_statement : USING open_parens_any expression error", //t "using_initialization : using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators", @@ -1188,20 +1225,20 @@ namespace Mono.CSharp //t "first_from_clause : FROM_FIRST type identifier_inside_body IN expression", //t "nested_from_clause : FROM identifier_inside_body IN expression", //t "nested_from_clause : FROM type identifier_inside_body IN expression", -//t "$$103 :", -//t "from_clause : FROM identifier_inside_body IN $$103 expression_or_error", -//t "$$104 :", -//t "from_clause : FROM type identifier_inside_body IN $$104 expression_or_error", +//t "$$106 :", +//t "from_clause : FROM identifier_inside_body IN $$106 expression_or_error", +//t "$$107 :", +//t "from_clause : FROM type identifier_inside_body IN $$107 expression_or_error", //t "query_body : query_body_clauses select_or_group_clause opt_query_continuation", //t "query_body : select_or_group_clause opt_query_continuation", //t "query_body : query_body_clauses COMPLETE_COMPLETION", //t "query_body : query_body_clauses error", //t "query_body : error", -//t "$$105 :", -//t "select_or_group_clause : SELECT $$105 expression_or_error", -//t "$$106 :", -//t "$$107 :", -//t "select_or_group_clause : GROUP $$106 expression_or_error $$107 by_expression", +//t "$$108 :", +//t "select_or_group_clause : SELECT $$108 expression_or_error", +//t "$$109 :", +//t "$$110 :", +//t "select_or_group_clause : GROUP $$109 expression_or_error $$110 by_expression", //t "by_expression : BY expression_or_error", //t "by_expression : error", //t "query_body_clauses : query_body_clause", @@ -1211,28 +1248,28 @@ namespace Mono.CSharp //t "query_body_clause : where_clause", //t "query_body_clause : join_clause", //t "query_body_clause : orderby_clause", -//t "$$108 :", -//t "let_clause : LET identifier_inside_body ASSIGN $$108 expression_or_error", -//t "$$109 :", -//t "where_clause : WHERE $$109 expression_or_error", -//t "$$110 :", //t "$$111 :", +//t "let_clause : LET identifier_inside_body ASSIGN $$111 expression_or_error", //t "$$112 :", -//t "join_clause : JOIN identifier_inside_body IN $$110 expression_or_error ON $$111 expression_or_error EQUALS $$112 expression_or_error opt_join_into", +//t "where_clause : WHERE $$112 expression_or_error", //t "$$113 :", //t "$$114 :", //t "$$115 :", -//t "join_clause : JOIN type identifier_inside_body IN $$113 expression_or_error ON $$114 expression_or_error EQUALS $$115 expression_or_error opt_join_into", +//t "join_clause : JOIN identifier_inside_body IN $$113 expression_or_error ON $$114 expression_or_error EQUALS $$115 expression_or_error opt_join_into", +//t "$$116 :", +//t "$$117 :", +//t "$$118 :", +//t "join_clause : JOIN type identifier_inside_body IN $$116 expression_or_error ON $$117 expression_or_error EQUALS $$118 expression_or_error opt_join_into", //t "opt_join_into :", //t "opt_join_into : INTO identifier_inside_body", -//t "$$116 :", -//t "orderby_clause : ORDERBY $$116 orderings", +//t "$$119 :", +//t "orderby_clause : ORDERBY $$119 orderings", //t "orderings : order_by", -//t "$$117 :", -//t "orderings : order_by COMMA $$117 orderings_then_by", +//t "$$120 :", +//t "orderings : order_by COMMA $$120 orderings_then_by", //t "orderings_then_by : then_by", -//t "$$118 :", -//t "orderings_then_by : orderings_then_by COMMA $$118 then_by", +//t "$$121 :", +//t "orderings_then_by : orderings_then_by COMMA $$121 then_by", //t "order_by : expression", //t "order_by : expression ASCENDING", //t "order_by : expression DESCENDING", @@ -1240,12 +1277,12 @@ namespace Mono.CSharp //t "then_by : expression ASCENDING", //t "then_by : expression DESCENDING", //t "opt_query_continuation :", -//t "$$119 :", -//t "opt_query_continuation : INTO identifier_inside_body $$119 query_body", +//t "$$122 :", +//t "opt_query_continuation : INTO identifier_inside_body $$122 query_body", //t "interactive_parsing : EVAL_STATEMENT_PARSER EOF", //t "interactive_parsing : EVAL_USING_DECLARATIONS_UNIT_PARSER using_directives opt_COMPLETE_COMPLETION", -//t "$$120 :", -//t "interactive_parsing : EVAL_STATEMENT_PARSER $$120 interactive_statement_list opt_COMPLETE_COMPLETION", +//t "$$123 :", +//t "interactive_parsing : EVAL_STATEMENT_PARSER $$123 interactive_statement_list opt_COMPLETE_COMPLETION", //t "interactive_parsing : EVAL_COMPILATION_UNIT_PARSER interactive_compilation_unit", //t "interactive_compilation_unit : opt_extern_alias_directives opt_using_directives", //t "interactive_compilation_unit : opt_extern_alias_directives opt_using_directives namespace_or_type_declarations", @@ -1259,16 +1296,16 @@ namespace Mono.CSharp //t "doc_cref : VOID opt_doc_method_sig", //t "doc_cref : builtin_types DOT IDENTIFIER opt_doc_method_sig", //t "doc_cref : doc_type_declaration_name DOT THIS", -//t "$$121 :", -//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$121 opt_doc_parameters CLOSE_BRACKET", +//t "$$124 :", +//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$124 opt_doc_parameters CLOSE_BRACKET", //t "doc_cref : EXPLICIT OPERATOR type opt_doc_method_sig", //t "doc_cref : IMPLICIT OPERATOR type opt_doc_method_sig", //t "doc_cref : OPERATOR overloadable_operator opt_doc_method_sig", //t "doc_type_declaration_name : type_declaration_name", //t "doc_type_declaration_name : doc_type_declaration_name DOT type_declaration_name", //t "opt_doc_method_sig :", -//t "$$122 :", -//t "opt_doc_method_sig : OPEN_PARENS $$122 opt_doc_parameters CLOSE_PARENS", +//t "$$125 :", +//t "opt_doc_method_sig : OPEN_PARENS $$125 opt_doc_parameters CLOSE_PARENS", //t "opt_doc_parameters :", //t "opt_doc_parameters : doc_parameters", //t "doc_parameters : doc_parameter", @@ -1313,7 +1350,8 @@ namespace Mono.CSharp "FROM_FIRST","JOIN","ON","EQUALS","SELECT","GROUP","BY","LET", "ORDERBY","ASCENDING","DESCENDING","INTO","INTERR_NULLABLE", "EXTERN_ALIAS","REFVALUE","REFTYPE","MAKEREF","ASYNC","AWAIT", - "INTERR_OPERATOR","GET","SET","LAST_KEYWORD","OPEN_BRACE", + "INTERR_OPERATOR","WHEN","INTERPOLATED_STRING", + "INTERPOLATED_STRING_END","GET","SET","LAST_KEYWORD","OPEN_BRACE", "CLOSE_BRACE","OPEN_BRACKET","CLOSE_BRACKET","OPEN_PARENS", "CLOSE_PARENS","DOT","COMMA","COLON","SEMICOLON","TILDE","PLUS", "MINUS","BANG","ASSIGN","OP_LT","OP_GT","BITWISE_AND","BITWISE_OR", @@ -1518,20 +1556,20 @@ namespace Mono.CSharp yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: -#line 389 "cs-parser.jay" +#line 392 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 2: -#line 390 "cs-parser.jay" +#line 393 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 6: case_6(); break; case 7: -#line 409 "cs-parser.jay" +#line 412 "cs-parser.jay" { module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); } @@ -1543,7 +1581,7 @@ case 13: case_13(); break; case 14: -#line 454 "cs-parser.jay" +#line 457 "cs-parser.jay" { Error_SyntaxError (yyToken); } @@ -1560,23 +1598,17 @@ case 19: case 20: case_20(); break; -case 21: - case_21(); - break; -case 22: - case_22(); - break; case 23: case_23(); break; case 24: case_24(); break; -case 27: - case_27(); +case 25: + case_25(); break; -case 28: - case_28(); +case 26: + case_26(); break; case 29: case_29(); @@ -1584,23 +1616,23 @@ case 29: case 30: case_30(); break; -case 43: - case_43(); +case 31: + case_31(); break; -case 44: -#line 638 "cs-parser.jay" - { - current_namespace.DeclarationFound = true; - } +case 32: + case_32(); break; case 45: case_45(); break; -case 53: - case_53(); +case 46: +#line 660 "cs-parser.jay" + { + current_namespace.DeclarationFound = true; + } break; -case 54: - case_54(); +case 47: + case_47(); break; case 55: case_55(); @@ -1627,47 +1659,47 @@ case 62: case_62(); break; case 63: -#line 763 "cs-parser.jay" - { yyVal = "event"; PushLocation (GetLocation (yyVals[0+yyTop])); } + case_63(); break; case 64: -#line 764 "cs-parser.jay" - { yyVal = "return"; PushLocation (GetLocation (yyVals[0+yyTop])); } + case_64(); break; case 65: -#line 771 "cs-parser.jay" - { - yyVal = new List<Attribute> (4) { (Attribute) yyVals[0+yyTop] }; - } +#line 787 "cs-parser.jay" + { yyVal = "event"; PushLocation (GetLocation (yyVals[0+yyTop])); } break; case 66: - case_66(); +#line 788 "cs-parser.jay" + { yyVal = "return"; PushLocation (GetLocation (yyVals[0+yyTop])); } break; case 67: -#line 788 "cs-parser.jay" +#line 795 "cs-parser.jay" { - ++lexer.parsing_block; + yyVal = new List<Attribute> (4) { (Attribute) yyVals[0+yyTop] }; } break; case 68: case_68(); break; -case 70: -#line 816 "cs-parser.jay" - { yyVal = null; HadAttributeParens = false; } +case 69: +#line 812 "cs-parser.jay" + { + ++lexer.parsing_block; + } break; -case 71: - case_71(); +case 70: + case_70(); break; case 72: -#line 828 "cs-parser.jay" - { yyVal = null; } +#line 840 "cs-parser.jay" + { yyVal = null; HadAttributeParens = false; } break; case 73: case_73(); break; case 74: - case_74(); +#line 852 "cs-parser.jay" + { yyVal = null; } break; case 75: case_75(); @@ -1676,61 +1708,56 @@ case 76: case_76(); break; case 77: -#line 872 "cs-parser.jay" - { - yyVal = new Argument ((Expression) yyVals[0+yyTop]); - } + case_77(); break; -case 79: - case_79(); +case 78: + case_78(); break; -case 80: -#line 885 "cs-parser.jay" +case 79: +#line 896 "cs-parser.jay" { - ++lexer.parsing_block; + yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 81: case_81(); break; case 82: - case_82(); +#line 909 "cs-parser.jay" + { + ++lexer.parsing_block; + } break; case 83: -#line 911 "cs-parser.jay" - { yyVal = null; } + case_83(); break; case 84: -#line 915 "cs-parser.jay" + case_84(); + break; +case 86: +#line 940 "cs-parser.jay" + { yyVal = null; } + break; +case 87: +#line 944 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; -case 85: -#line 919 "cs-parser.jay" +case 88: +#line 948 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; -case 88: - case_88(); - break; -case 89: - case_89(); +case 91: + case_91(); break; -case 103: - case_103(); - break; -case 104: - case_104(); - break; -case 105: - case_105(); +case 92: + case_92(); break; case 106: -#line 996 "cs-parser.jay" - { - } + case_106(); break; case 107: case_107(); @@ -1739,7 +1766,9 @@ case 108: case_108(); break; case 109: - case_109(); +#line 1025 "cs-parser.jay" + { + } break; case 110: case_110(); @@ -1748,10 +1777,7 @@ case 111: case_111(); break; case 112: -#line 1046 "cs-parser.jay" - { - Error_SyntaxError (yyToken); - } + case_112(); break; case 113: case_113(); @@ -1760,124 +1786,124 @@ case 114: case_114(); break; case 115: - case_115(); +#line 1075 "cs-parser.jay" + { + Error_SyntaxError (yyToken); + } + break; +case 116: + case_116(); + break; +case 117: + case_117(); break; case 118: -#line 1095 "cs-parser.jay" + case_118(); + break; +case 121: +#line 1124 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 119: -#line 1099 "cs-parser.jay" +case 122: +#line 1128 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 120: - case_120(); +case 123: + case_123(); break; -case 121: -#line 1115 "cs-parser.jay" +case 124: +#line 1144 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 122: - case_122(); - break; -case 123: - case_123(); +case 125: + case_125(); break; case 126: case_126(); break; -case 127: - case_127(); - break; -case 128: - case_128(); - break; case 129: case_129(); break; case 130: -#line 1194 "cs-parser.jay" - { - report.Error (1641, GetLocation (yyVals[-1+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); - } + case_130(); + break; +case 131: + case_131(); break; case 132: case_132(); break; case 133: - case_133(); +#line 1223 "cs-parser.jay" + { + report.Error (1641, GetLocation (yyVals[-1+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); + } + break; +case 135: + case_135(); break; case 136: -#line 1224 "cs-parser.jay" + case_136(); + break; +case 139: +#line 1253 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 137: -#line 1228 "cs-parser.jay" +case 140: +#line 1257 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 138: - case_138(); +case 141: + case_141(); break; -case 139: -#line 1241 "cs-parser.jay" +case 142: +#line 1270 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 140: - case_140(); - break; case 143: -#line 1260 "cs-parser.jay" + case_143(); + break; +case 146: +#line 1289 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 144: -#line 1264 "cs-parser.jay" +case 147: +#line 1293 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 145: - case_145(); +case 148: + case_148(); break; -case 146: -#line 1280 "cs-parser.jay" +case 149: +#line 1309 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 147: - case_147(); - break; -case 148: - case_148(); +case 150: + case_150(); break; case 151: case_151(); break; -case 152: - case_152(); - break; -case 153: - case_153(); - break; case 154: -#line 1348 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.All; - } + case_154(); break; case 155: case_155(); @@ -1886,51 +1912,54 @@ case 156: case_156(); break; case 157: -#line 1387 "cs-parser.jay" +#line 1377 "cs-parser.jay" { - lexer.parsing_generic_declaration = true; + valid_param_mod = ParameterModifierType.All; } break; case 158: case_158(); break; case 159: -#line 1397 "cs-parser.jay" - { - lexer.ConstraintsParsing = true; - } + case_159(); break; case 160: - case_160(); +#line 1416 "cs-parser.jay" + { + lexer.parsing_generic_declaration = true; + } break; case 161: case_161(); break; case 162: - case_162(); +#line 1426 "cs-parser.jay" + { + lexer.ConstraintsParsing = true; + } break; -case 166: -#line 1475 "cs-parser.jay" - { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } +case 163: + case_163(); break; -case 167: - case_167(); +case 164: + case_164(); break; -case 168: - case_168(); +case 165: + case_165(); break; case 169: -#line 1499 "cs-parser.jay" - { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } +#line 1504 "cs-parser.jay" + { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } + break; +case 170: + case_170(); break; case 171: case_171(); break; case 172: - case_172(); - break; -case 173: - case_173(); +#line 1528 "cs-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 174: case_174(); @@ -1945,25 +1974,25 @@ case 177: case_177(); break; case 178: -#line 1571 "cs-parser.jay" - { - yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); - } + case_178(); break; case 179: -#line 1575 "cs-parser.jay" - { - yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); - } + case_179(); break; case 180: case_180(); break; case 181: - case_181(); +#line 1600 "cs-parser.jay" + { + yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); + } break; case 182: - case_182(); +#line 1604 "cs-parser.jay" + { + yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); + } break; case 183: case_183(); @@ -1978,32 +2007,32 @@ case 186: case_186(); break; case 187: -#line 1656 "cs-parser.jay" - { - ++lexer.parsing_block; - } + case_187(); break; case 188: case_188(); break; case 189: -#line 1697 "cs-parser.jay" - { yyVal = Parameter.Modifier.NONE; } + case_189(); break; -case 191: -#line 1705 "cs-parser.jay" +case 190: +#line 1685 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + ++lexer.parsing_block; } break; -case 192: - case_192(); +case 191: + case_191(); break; -case 193: - case_193(); +case 192: +#line 1726 "cs-parser.jay" + { yyVal = Parameter.Modifier.NONE; } break; case 194: - case_194(); +#line 1734 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 195: case_195(); @@ -2024,10 +2053,7 @@ case 200: case_200(); break; case 201: -#line 1799 "cs-parser.jay" - { - Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); - } + case_201(); break; case 202: case_202(); @@ -2036,7 +2062,10 @@ case 203: case_203(); break; case 204: - case_204(); +#line 1828 "cs-parser.jay" + { + Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); + } break; case 205: case_205(); @@ -2045,10 +2074,7 @@ case 206: case_206(); break; case 207: -#line 1849 "cs-parser.jay" - { - current_property = null; - } + case_207(); break; case 208: case_208(); @@ -2056,41 +2082,44 @@ case 208: case 209: case_209(); break; +case 210: +#line 1878 "cs-parser.jay" + { + current_property = null; + } + break; case 211: case_211(); break; case 212: case_212(); break; -case 215: -#line 1911 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; - } +case 214: + case_214(); break; -case 216: - case_216(); - break; -case 217: - case_217(); +case 215: + case_215(); break; case 218: -#line 1957 "cs-parser.jay" +#line 1940 "cs-parser.jay" { - lbag.AppendToMember (current_property, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 219: case_219(); break; -case 224: - case_224(); +case 220: + case_220(); break; -case 225: - case_225(); +case 221: +#line 1986 "cs-parser.jay" + { + lbag.AppendToMember (current_property, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } break; -case 226: - case_226(); +case 222: + case_222(); break; case 227: case_227(); @@ -2098,17 +2127,15 @@ case 227: case 228: case_228(); break; +case 229: + case_229(); + break; case 230: case_230(); break; case 231: case_231(); break; -case 232: -#line 2098 "cs-parser.jay" - { - } - break; case 233: case_233(); break; @@ -2116,187 +2143,186 @@ case 234: case_234(); break; case 235: - case_235(); +#line 2127 "cs-parser.jay" + { + } break; case 236: case_236(); break; case 237: -#line 2138 "cs-parser.jay" + case_237(); + break; +case 238: + case_238(); + break; +case 239: + case_239(); + break; +case 240: +#line 2167 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; -case 240: - case_240(); +case 243: + case_243(); break; -case 241: - case_241(); +case 244: + case_244(); break; -case 242: -#line 2163 "cs-parser.jay" +case 245: +#line 2192 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; -case 243: -#line 2167 "cs-parser.jay" +case 246: +#line 2196 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; -case 248: -#line 2175 "cs-parser.jay" +case 251: +#line 2204 "cs-parser.jay" { report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; -case 249: -#line 2179 "cs-parser.jay" +case 252: +#line 2208 "cs-parser.jay" { report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; -case 250: -#line 2183 "cs-parser.jay" +case 253: +#line 2212 "cs-parser.jay" { report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; -case 251: -#line 2189 "cs-parser.jay" +case 254: +#line 2218 "cs-parser.jay" { } break; -case 252: - case_252(); - break; -case 254: - case_254(); - break; case 255: -#line 2233 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.DefaultValue; - } + case_255(); break; -case 256: - case_256(); +case 257: + case_257(); break; case 258: -#line 2279 "cs-parser.jay" - { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } + case_258(); break; case 259: -#line 2280 "cs-parser.jay" - { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } - break; -case 260: -#line 2281 "cs-parser.jay" - { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } + case_259(); break; case 261: -#line 2282 "cs-parser.jay" - { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2312 "cs-parser.jay" + { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 262: -#line 2283 "cs-parser.jay" - { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2313 "cs-parser.jay" + { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 263: -#line 2284 "cs-parser.jay" - { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2314 "cs-parser.jay" + { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 264: -#line 2286 "cs-parser.jay" - { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2315 "cs-parser.jay" + { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 265: -#line 2287 "cs-parser.jay" - { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2316 "cs-parser.jay" + { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 266: -#line 2289 "cs-parser.jay" - { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2317 "cs-parser.jay" + { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 267: -#line 2290 "cs-parser.jay" - { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2319 "cs-parser.jay" + { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 268: -#line 2291 "cs-parser.jay" - { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2320 "cs-parser.jay" + { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 269: -#line 2292 "cs-parser.jay" - { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2322 "cs-parser.jay" + { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 270: -#line 2293 "cs-parser.jay" - { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2323 "cs-parser.jay" + { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 271: -#line 2294 "cs-parser.jay" - { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2324 "cs-parser.jay" + { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 272: -#line 2295 "cs-parser.jay" - { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2325 "cs-parser.jay" + { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 273: -#line 2296 "cs-parser.jay" - { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2326 "cs-parser.jay" + { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 274: -#line 2297 "cs-parser.jay" - { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2327 "cs-parser.jay" + { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 275: -#line 2298 "cs-parser.jay" - { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2328 "cs-parser.jay" + { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 276: -#line 2299 "cs-parser.jay" - { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2329 "cs-parser.jay" + { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 277: -#line 2300 "cs-parser.jay" - { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2330 "cs-parser.jay" + { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 278: -#line 2301 "cs-parser.jay" - { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2331 "cs-parser.jay" + { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 279: -#line 2302 "cs-parser.jay" - { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2332 "cs-parser.jay" + { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 280: -#line 2309 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.DefaultValue; - } +#line 2333 "cs-parser.jay" + { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 281: - case_281(); +#line 2334 "cs-parser.jay" + { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 282: -#line 2332 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.DefaultValue; - } +#line 2335 "cs-parser.jay" + { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 283: case_283(); break; case 284: - case_284(); +#line 2349 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } break; case 285: case_285(); break; case 286: - case_286(); +#line 2372 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } break; case 287: case_287(); @@ -2307,36 +2333,36 @@ case 288: case 289: case_289(); break; +case 290: + case_290(); + break; case 291: -#line 2442 "cs-parser.jay" - { current_block = null; yyVal = null; } + case_291(); break; -case 294: -#line 2454 "cs-parser.jay" - { - ++lexer.parsing_block; - } +case 292: + case_292(); + break; +case 293: + case_293(); break; case 295: - case_295(); +#line 2496 "cs-parser.jay" + { current_block = null; yyVal = null; } break; -case 296: -#line 2464 "cs-parser.jay" +case 298: +#line 2508 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 297: - case_297(); - break; -case 298: - case_298(); - break; case 299: case_299(); break; case 300: - case_300(); +#line 2518 "cs-parser.jay" + { + ++lexer.parsing_block; + } break; case 301: case_301(); @@ -2359,59 +2385,59 @@ case 306: case 307: case_307(); break; +case 308: + case_308(); + break; case 309: -#line 2591 "cs-parser.jay" - { - ++lexer.parsing_block; - } + case_309(); break; case 310: case_310(); break; +case 311: + case_311(); + break; case 313: -#line 2609 "cs-parser.jay" +#line 2645 "cs-parser.jay" { - current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + ++lexer.parsing_block; } break; case 314: -#line 2613 "cs-parser.jay" + case_314(); + break; +case 317: +#line 2663 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 315: - case_315(); - break; -case 316: -#line 2626 "cs-parser.jay" +case 318: +#line 2667 "cs-parser.jay" { - ++lexer.parsing_block; + current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 317: - case_317(); - break; -case 318: - case_318(); - break; case 319: -#line 2651 "cs-parser.jay" + case_319(); + break; +case 320: +#line 2680 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + ++lexer.parsing_block; } break; +case 321: + case_321(); + break; case 322: case_322(); break; case 323: - case_323(); - break; -case 324: - case_324(); - break; -case 325: - case_325(); +#line 2705 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 326: case_326(); @@ -2425,6 +2451,9 @@ case 328: case 329: case_329(); break; +case 330: + case_330(); + break; case 331: case_331(); break; @@ -2434,71 +2463,71 @@ case 332: case 333: case_333(); break; -case 334: - case_334(); - break; case 335: case_335(); break; case 336: case_336(); break; +case 337: + case_337(); + break; case 338: case_338(); break; case 339: case_339(); break; -case 342: -#line 2839 "cs-parser.jay" - { - lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); - } +case 340: + case_340(); break; -case 344: - case_344(); +case 342: + case_342(); break; -case 345: - case_345(); +case 343: + case_343(); break; case 346: - case_346(); - break; -case 347: - case_347(); +#line 2893 "cs-parser.jay" + { + lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); + } break; case 348: case_348(); break; +case 349: + case_349(); + break; case 350: -#line 2913 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; - } + case_350(); break; case 351: case_351(); break; case 352: -#line 2932 "cs-parser.jay" + case_352(); + break; +case 354: +#line 2967 "cs-parser.jay" { - lexer.ConstraintsParsing = false; + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; -case 353: - case_353(); - break; case 355: case_355(); break; +case 356: +#line 2986 "cs-parser.jay" + { + lexer.ConstraintsParsing = false; + } + break; case 357: case_357(); break; -case 358: - case_358(); - break; -case 360: - case_360(); +case 359: + case_359(); break; case 361: case_361(); @@ -2506,8 +2535,8 @@ case 361: case 362: case_362(); break; -case 363: - case_363(); +case 364: + case_364(); break; case 365: case_365(); @@ -2518,14 +2547,8 @@ case 366: case 367: case_367(); break; -case 368: - case_368(); - break; case 369: -#line 3062 "cs-parser.jay" - { - lexer.parsing_generic_declaration = true; - } + case_369(); break; case 370: case_370(); @@ -2533,8 +2556,14 @@ case 370: case 371: case_371(); break; +case 372: + case_372(); + break; case 373: - case_373(); +#line 3111 "cs-parser.jay" + { + lexer.parsing_generic_declaration = true; + } break; case 374: case_374(); @@ -2542,15 +2571,15 @@ case 374: case 375: case_375(); break; -case 376: - case_376(); - break; case 377: case_377(); break; case 378: case_378(); break; +case 379: + case_379(); + break; case 380: case_380(); break; @@ -2560,155 +2589,164 @@ case 381: case 382: case_382(); break; -case 383: - case_383(); - break; case 384: case_384(); break; +case 385: + case_385(); + break; case 386: -#line 3187 "cs-parser.jay" + case_386(); + break; +case 387: + case_387(); + break; +case 388: + case_388(); + break; +case 390: +#line 3236 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; -case 387: -#line 3194 "cs-parser.jay" +case 391: +#line 3243 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; -case 393: - case_393(); +case 397: + case_397(); break; -case 395: -#line 3224 "cs-parser.jay" +case 399: +#line 3273 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 396: - case_396(); +case 400: + case_400(); break; -case 397: -#line 3243 "cs-parser.jay" +case 401: +#line 3292 "cs-parser.jay" { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 399: - case_399(); +case 403: + case_403(); break; -case 400: - case_400(); +case 404: + case_404(); break; -case 401: -#line 3264 "cs-parser.jay" +case 405: +#line 3313 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 402: -#line 3268 "cs-parser.jay" +case 406: +#line 3317 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 403: - case_403(); +case 407: + case_407(); break; -case 404: - case_404(); +case 408: + case_408(); break; -case 405: - case_405(); +case 409: + case_409(); break; -case 406: -#line 3302 "cs-parser.jay" +case 410: +#line 3351 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; -case 407: -#line 3303 "cs-parser.jay" +case 411: +#line 3352 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; -case 408: -#line 3304 "cs-parser.jay" +case 412: +#line 3353 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; -case 409: -#line 3305 "cs-parser.jay" +case 413: +#line 3354 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; -case 410: -#line 3306 "cs-parser.jay" +case 414: +#line 3355 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; -case 411: -#line 3307 "cs-parser.jay" +case 415: +#line 3356 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; -case 413: -#line 3312 "cs-parser.jay" +case 417: +#line 3361 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; -case 414: -#line 3313 "cs-parser.jay" +case 418: +#line 3362 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; -case 415: -#line 3314 "cs-parser.jay" +case 419: +#line 3363 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; -case 416: -#line 3315 "cs-parser.jay" +case 420: +#line 3364 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; -case 417: -#line 3316 "cs-parser.jay" +case 421: +#line 3365 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; -case 418: -#line 3317 "cs-parser.jay" +case 422: +#line 3366 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; -case 419: -#line 3318 "cs-parser.jay" +case 423: +#line 3367 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; -case 420: -#line 3319 "cs-parser.jay" +case 424: +#line 3368 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; -case 421: -#line 3320 "cs-parser.jay" +case 425: +#line 3369 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; -case 443: - case_443(); +case 448: + case_448(); break; -case 447: -#line 3363 "cs-parser.jay" +case 452: +#line 3413 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; -case 448: -#line 3367 "cs-parser.jay" +case 453: +#line 3417 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; -case 449: -#line 3368 "cs-parser.jay" - { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } - break; case 454: - case_454(); +#line 3418 "cs-parser.jay" + { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 455: -#line 3401 "cs-parser.jay" +#line 3425 "cs-parser.jay" { - yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + yyVal = new InterpolatedString ((StringLiteral) yyVals[-2+yyTop], (List<Expression>) yyVals[-1+yyTop], (StringLiteral) yyVals[0+yyTop]); } break; case 456: - case_456(); +#line 3429 "cs-parser.jay" + { + yyVal = new InterpolatedString ((StringLiteral) yyVals[0+yyTop], null, null); + } break; case 457: case_457(); @@ -2717,50 +2755,46 @@ case 458: case_458(); break; case 459: - case_459(); +#line 3452 "cs-parser.jay" + { + yyVal = new InterpolatedStringInsert ((Expression) yyVals[0+yyTop]); + } break; case 460: case_460(); break; case 461: - case_461(); +#line 3462 "cs-parser.jay" + { + lexer.parsing_interpolation_format = true; + } break; case 462: case_462(); break; case 463: - case_463(); - break; -case 464: -#line 3465 "cs-parser.jay" - { - yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); - } - break; -case 465: - case_465(); - break; -case 466: -#line 3473 "cs-parser.jay" +#line 3474 "cs-parser.jay" { - yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); + lexer.parsing_interpolation_format = true; } break; -case 467: - case_467(); - break; -case 468: - case_468(); +case 464: + case_464(); break; case 469: case_469(); break; case 470: - case_470(); +#line 3516 "cs-parser.jay" + { + yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 471: -#line 3503 "cs-parser.jay" - { yyVal = null; } + case_471(); + break; +case 472: + case_472(); break; case 473: case_473(); @@ -2769,14 +2803,10 @@ case 474: case_474(); break; case 475: -#line 3525 "cs-parser.jay" - { yyVal = null; } + case_475(); break; case 476: -#line 3529 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_476(); break; case 477: case_477(); @@ -2785,20 +2815,23 @@ case 478: case_478(); break; case 479: - case_479(); +#line 3577 "cs-parser.jay" + { + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); + } break; case 480: case_480(); break; case 481: - case_481(); - break; -case 482: -#line 3568 "cs-parser.jay" +#line 3585 "cs-parser.jay" { - yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; +case 482: + case_482(); + break; case 483: case_483(); break; @@ -2809,14 +2842,24 @@ case 485: case_485(); break; case 486: - case_486(); +#line 3615 "cs-parser.jay" + { yyVal = null; } + break; +case 488: + case_488(); break; case 489: -#line 3608 "cs-parser.jay" + case_489(); + break; +case 490: +#line 3637 "cs-parser.jay" { yyVal = null; } break; case 491: - case_491(); +#line 3641 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 492: case_492(); @@ -2831,25 +2874,29 @@ case 495: case_495(); break; case 496: -#line 3662 "cs-parser.jay" + case_496(); + break; +case 497: +#line 3680 "cs-parser.jay" { - yyVal = new Argument ((Expression) yyVals[0+yyTop]); + yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } break; +case 498: + case_498(); + break; +case 499: + case_499(); + break; case 500: case_500(); break; case 501: case_501(); break; -case 502: - case_502(); - break; -case 503: - case_503(); - break; -case 505: - case_505(); +case 504: +#line 3720 "cs-parser.jay" + { yyVal = null; } break; case 506: case_506(); @@ -2867,40 +2914,31 @@ case 510: case_510(); break; case 511: - case_511(); - break; -case 512: - case_512(); - break; -case 513: -#line 3766 "cs-parser.jay" +#line 3774 "cs-parser.jay" { - yyVal = new Argument ((Expression) yyVals[0+yyTop]); + yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 515: -#line 3774 "cs-parser.jay" - { - yyVal = new This (GetLocation (yyVals[0+yyTop])); - } + case_515(); break; case 516: - case_516(); +#line 3792 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); + } break; case 517: case_517(); break; case 518: -#line 3794 "cs-parser.jay" +#line 3801 "cs-parser.jay" { - yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); } break; case 519: -#line 3801 "cs-parser.jay" - { - yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); - } + case_519(); break; case 520: case_520(); @@ -2914,9 +2952,6 @@ case 522: case 523: case_523(); break; -case 524: - case_524(); - break; case 525: case_525(); break; @@ -2924,10 +2959,7 @@ case 526: case_526(); break; case 527: -#line 3868 "cs-parser.jay" - { - ++lexer.parsing_type; - } + case_527(); break; case 528: case_528(); @@ -2936,35 +2968,43 @@ case 529: case_529(); break; case 530: -#line 3890 "cs-parser.jay" - { - yyVal = new EmptyCompletion (); - } + case_530(); + break; +case 531: + case_531(); + break; +case 532: + case_532(); break; case 533: -#line 3899 "cs-parser.jay" - { yyVal = null; } +#line 3928 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } break; case 535: - case_535(); +#line 3936 "cs-parser.jay" + { + yyVal = new This (GetLocation (yyVals[0+yyTop])); + } break; case 536: case_536(); break; case 537: -#line 3921 "cs-parser.jay" - { - yyVal = new EmptyCompletion (); - } + case_537(); break; case 538: -#line 3925 "cs-parser.jay" +#line 3956 "cs-parser.jay" { - yyVal = yyVals[-1+yyTop]; + yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 539: - case_539(); +#line 3963 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } break; case 540: case_540(); @@ -2975,44 +3015,39 @@ case 541: case 542: case_542(); break; +case 543: + case_543(); + break; +case 544: + case_544(); + break; +case 545: + case_545(); + break; case 546: case_546(); break; case 547: - case_547(); +#line 4030 "cs-parser.jay" + { + ++lexer.parsing_type; + } break; case 548: case_548(); break; case 549: -#line 3985 "cs-parser.jay" - { - yyVal = 2; - } + case_549(); break; case 550: -#line 3989 "cs-parser.jay" - { - yyVal = ((int) yyVals[-1+yyTop]) + 1; - } - break; -case 551: -#line 3996 "cs-parser.jay" - { - yyVal = null; - } - break; -case 552: -#line 4000 "cs-parser.jay" +#line 4052 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + yyVal = new EmptyCompletion (); } break; case 553: - case_553(); - break; -case 554: - case_554(); +#line 4061 "cs-parser.jay" + { yyVal = null; } break; case 555: case_555(); @@ -3021,7 +3056,16 @@ case 556: case_556(); break; case 557: - case_557(); +#line 4083 "cs-parser.jay" + { + yyVal = new EmptyCompletion (); + } + break; +case 558: +#line 4087 "cs-parser.jay" + { + yyVal = yyVals[-1+yyTop]; + } break; case 559: case_559(); @@ -3035,15 +3079,6 @@ case 561: case 562: case_562(); break; -case 563: - case_563(); - break; -case 564: - case_564(); - break; -case 565: - case_565(); - break; case 566: case_566(); break; @@ -3054,34 +3089,37 @@ case 568: case_568(); break; case 569: -#line 4133 "cs-parser.jay" +#line 4147 "cs-parser.jay" { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); + yyVal = 2; } break; case 570: - case_570(); +#line 4151 "cs-parser.jay" + { + yyVal = ((int) yyVals[-1+yyTop]) + 1; + } break; case 571: -#line 4146 "cs-parser.jay" +#line 4158 "cs-parser.jay" { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); + yyVal = null; } break; case 572: - case_572(); - break; -case 573: -#line 4163 "cs-parser.jay" +#line 4162 "cs-parser.jay" { - yyVal = ParametersCompiled.Undefined; + yyVal = yyVals[0+yyTop]; } break; +case 573: + case_573(); + break; +case 574: + case_574(); + break; case 575: -#line 4171 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_575(); break; case 576: case_576(); @@ -3090,16 +3128,10 @@ case 577: case_577(); break; case 579: -#line 4197 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_579(); break; case 580: -#line 4201 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_580(); break; case 581: case_581(); @@ -3119,47 +3151,41 @@ case 585: case 586: case_586(); break; +case 587: + case_587(); + break; case 588: -#line 4265 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_588(); break; case 589: -#line 4269 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); +#line 4295 "cs-parser.jay" + { + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } break; case 590: -#line 4273 "cs-parser.jay" - { - yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_590(); break; case 591: -#line 4277 "cs-parser.jay" +#line 4308 "cs-parser.jay" { - yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 592: -#line 4281 "cs-parser.jay" - { - yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_592(); break; case 593: -#line 4285 "cs-parser.jay" +#line 4325 "cs-parser.jay" { - yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = ParametersCompiled.Undefined; } break; -case 594: - case_594(); - break; case 595: - case_595(); +#line 4333 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } break; case 596: case_596(); @@ -3167,11 +3193,17 @@ case 596: case 597: case_597(); break; -case 598: - case_598(); - break; case 599: - case_599(); +#line 4359 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 600: +#line 4363 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 601: case_601(); @@ -3192,25 +3224,40 @@ case 606: case_606(); break; case 608: - case_608(); +#line 4427 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 609: - case_609(); +#line 4431 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 610: - case_610(); +#line 4435 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 611: - case_611(); +#line 4439 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 612: -#line 4393 "cs-parser.jay" +#line 4443 "cs-parser.jay" { - yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 613: - case_613(); +#line 4447 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 614: case_614(); @@ -3224,20 +3271,17 @@ case 616: case 617: case_617(); break; +case 618: + case_618(); + break; case 619: case_619(); break; case 621: -#line 4445 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_621(); break; case 622: -#line 4449 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_622(); break; case 623: case_623(); @@ -3245,6 +3289,12 @@ case 623: case 624: case_624(); break; +case 625: + case_625(); + break; +case 626: + case_626(); + break; case 628: case_628(); break; @@ -3257,6 +3307,12 @@ case 630: case 631: case_631(); break; +case 632: +#line 4555 "cs-parser.jay" + { + yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; case 633: case_633(); break; @@ -3275,56 +3331,74 @@ case 637: case 638: case_638(); break; -case 639: - case_639(); - break; -case 640: - case_640(); +case 641: +#line 4611 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 642: - case_642(); - break; -case 643: - case_643(); - break; -case 644: - case_644(); +#line 4615 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 645: case_645(); break; -case 647: - case_647(); +case 646: +#line 4626 "cs-parser.jay" + { + yyVal = new WildcardPattern (GetLocation (yyVals[0+yyTop])); + } break; -case 648: - case_648(); +case 649: +#line 4635 "cs-parser.jay" + { + yyVal = new RecursivePattern ((ATypeNameExpression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 650: - case_650(); +#line 4642 "cs-parser.jay" + { + yyVal = new PropertyPattern ((ATypeNameExpression) yyVals[-3+yyTop], (List<PropertyPatternMember>) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 651: case_651(); break; +case 652: + case_652(); + break; case 653: case_653(); break; -case 654: - case_654(); +case 655: + case_655(); break; case 656: - case_656(); +#line 4684 "cs-parser.jay" + { + yyVal = new Arguments (0); + } break; -case 657: - case_657(); +case 658: + case_658(); break; case 659: case_659(); break; case 660: - case_660(); +#line 4710 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } + break; +case 661: + case_661(); break; -case 662: - case_662(); +case 663: + case_663(); break; case 664: case_664(); @@ -3335,9 +3409,6 @@ case 665: case 666: case_666(); break; -case 667: - case_667(); - break; case 668: case_668(); break; @@ -3362,9 +3433,6 @@ case 674: case 675: case_675(); break; -case 676: - case_676(); - break; case 677: case_677(); break; @@ -3377,63 +3445,41 @@ case 679: case 680: case_680(); break; -case 681: - case_681(); - break; case 682: case_682(); break; case 683: case_683(); break; -case 684: - case_684(); - break; case 685: -#line 4821 "cs-parser.jay" - { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } + case_685(); break; case 686: case_686(); break; -case 687: -#line 4832 "cs-parser.jay" - { - start_block (Location.Null); - } - break; case 688: case_688(); break; -case 690: - case_690(); +case 689: + case_689(); + break; +case 691: + case_691(); break; case 692: case_692(); break; -case 693: - case_693(); - break; case 694: case_694(); break; case 695: case_695(); break; -case 696: - case_696(); - break; case 697: case_697(); break; -case 698: - case_698(); - break; case 699: -#line 4899 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_699(); break; case 700: case_700(); @@ -3442,10 +3488,7 @@ case 701: case_701(); break; case 702: -#line 4913 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_702(); break; case 703: case_703(); @@ -3453,11 +3496,23 @@ case 703: case 704: case_704(); break; +case 705: + case_705(); + break; +case 706: + case_706(); + break; +case 707: + case_707(); + break; +case 708: + case_708(); + break; +case 709: + case_709(); + break; case 710: -#line 4938 "cs-parser.jay" - { - yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); - } + case_710(); break; case 711: case_711(); @@ -3468,58 +3523,42 @@ case 712: case 713: case_713(); break; +case 714: + case_714(); + break; case 715: -#line 4967 "cs-parser.jay" - { - yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); - } + case_715(); break; case 716: -#line 4974 "cs-parser.jay" - { - yyVal = null; - } + case_716(); + break; +case 717: + case_717(); break; case 718: case_718(); break; case 719: -#line 4995 "cs-parser.jay" - { - yyVal = null; - } + case_719(); break; case 720: -#line 4999 "cs-parser.jay" - { - yyVal = null; - } +#line 5055 "cs-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 721: -#line 5003 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_721(); break; case 722: -#line 5007 "cs-parser.jay" +#line 5066 "cs-parser.jay" { - yyVal = yyVals[-1+yyTop]; + start_block (Location.Null); } break; case 723: case_723(); break; -case 724: - case_724(); - break; case 725: -#line 5032 "cs-parser.jay" - { - } - break; -case 726: - case_726(); + case_725(); break; case 727: case_727(); @@ -3531,20 +3570,21 @@ case 729: case_729(); break; case 730: -#line 5084 "cs-parser.jay" - { yyVal = null; } + case_730(); break; case 731: -#line 5086 "cs-parser.jay" - { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } + case_731(); break; case 732: case_732(); break; case 733: -#line 5099 "cs-parser.jay" + case_733(); + break; +case 734: +#line 5133 "cs-parser.jay" { - lexer.parsing_modifiers = false; + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 735: @@ -3554,7 +3594,10 @@ case 736: case_736(); break; case 737: - case_737(); +#line 5147 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } break; case 738: case_738(); @@ -3562,23 +3605,11 @@ case 738: case 739: case_739(); break; -case 740: - case_740(); - break; -case 741: - case_741(); - break; -case 742: - case_742(); - break; -case 743: - case_743(); - break; -case 744: - case_744(); - break; case 745: - case_745(); +#line 5172 "cs-parser.jay" + { + yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); + } break; case 746: case_746(); @@ -3589,26 +3620,44 @@ case 747: case 748: case_748(); break; -case 749: - case_749(); - break; case 750: - case_750(); +#line 5201 "cs-parser.jay" + { + yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); + } + break; +case 751: +#line 5208 "cs-parser.jay" + { + yyVal = null; + } break; case 753: case_753(); break; case 754: - case_754(); +#line 5229 "cs-parser.jay" + { + yyVal = null; + } + break; +case 755: +#line 5233 "cs-parser.jay" + { + yyVal = null; + } break; case 756: -#line 5229 "cs-parser.jay" +#line 5237 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 757: - case_757(); +#line 5241 "cs-parser.jay" + { + yyVal = yyVals[-1+yyTop]; + } break; case 758: case_758(); @@ -3617,7 +3666,9 @@ case 759: case_759(); break; case 760: - case_760(); +#line 5266 "cs-parser.jay" + { + } break; case 761: case_761(); @@ -3632,29 +3683,22 @@ case 764: case_764(); break; case 765: -#line 5322 "cs-parser.jay" - { - yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); - } +#line 5318 "cs-parser.jay" + { yyVal = null; } break; case 766: -#line 5326 "cs-parser.jay" - { - yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); - } +#line 5320 "cs-parser.jay" + { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 767: + case_767(); + break; +case 768: #line 5333 "cs-parser.jay" { - yyVal = null; + lexer.parsing_modifiers = false; } break; -case 768: - case_768(); - break; -case 769: - case_769(); - break; case 770: case_770(); break; @@ -3662,10 +3706,7 @@ case 771: case_771(); break; case 772: -#line 5378 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_772(); break; case 773: case_773(); @@ -3688,116 +3729,161 @@ case 778: case 779: case_779(); break; +case 780: + case_780(); + break; +case 781: + case_781(); + break; +case 782: + case_782(); + break; +case 783: + case_783(); + break; case 784: -#line 5440 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } + case_784(); break; case 785: -#line 5444 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } - break; -case 787: - case_787(); + case_785(); break; case 788: case_788(); break; +case 789: + case_789(); + break; case 791: -#line 5478 "cs-parser.jay" +#line 5463 "cs-parser.jay" { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); + yyVal = yyVals[0+yyTop]; } break; case 792: -#line 5482 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } + case_792(); break; -case 821: - case_821(); +case 793: + case_793(); break; -case 822: - case_822(); +case 794: + case_794(); break; -case 823: - case_823(); +case 795: + case_795(); break; -case 824: - case_824(); +case 796: + case_796(); break; -case 825: - case_825(); +case 797: + case_797(); break; -case 828: - case_828(); +case 798: + case_798(); break; -case 829: - case_829(); +case 799: + case_799(); break; -case 830: - case_830(); +case 800: +#line 5556 "cs-parser.jay" + { + yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); + } break; -case 834: - case_834(); +case 801: +#line 5560 "cs-parser.jay" + { + yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); + } break; -case 835: -#line 5633 "cs-parser.jay" +case 802: +#line 5567 "cs-parser.jay" { - yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); + yyVal = null; } break; -case 837: -#line 5641 "cs-parser.jay" +case 803: + case_803(); + break; +case 804: + case_804(); + break; +case 805: + case_805(); + break; +case 806: + case_806(); + break; +case 807: +#line 5612 "cs-parser.jay" { - yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); + yyVal = yyVals[0+yyTop]; } break; -case 838: - case_838(); +case 808: + case_808(); break; -case 839: - case_839(); +case 809: + case_809(); break; -case 840: - case_840(); +case 810: + case_810(); break; -case 841: - case_841(); +case 811: + case_811(); break; -case 843: - case_843(); +case 812: + case_812(); break; -case 845: - case_845(); +case 813: + case_813(); break; -case 846: - case_846(); +case 814: + case_814(); break; -case 850: - case_850(); +case 819: +#line 5674 "cs-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } break; -case 853: - case_853(); +case 820: +#line 5678 "cs-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } break; -case 854: - case_854(); +case 822: + case_822(); break; -case 855: -#line 5755 "cs-parser.jay" +case 823: + case_823(); + break; +case 826: +#line 5712 "cs-parser.jay" { - report.Error (145, lexer.Location, "A const field requires a value to be provided"); + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } + break; +case 827: +#line 5716 "cs-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 856: case_856(); break; -case 861: - case_861(); +case 857: + case_857(); + break; +case 858: + case_858(); + break; +case 859: + case_859(); + break; +case 860: + case_860(); break; case 863: case_863(); @@ -3808,29 +3894,26 @@ case 864: case 865: case_865(); break; -case 866: -#line 5805 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } - break; -case 867: - case_867(); - break; -case 868: -#line 5815 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } - break; case 869: -#line 5816 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } + case_869(); break; case 870: - case_870(); - break; -case 871: - case_871(); +#line 5857 "cs-parser.jay" + { + yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); + } break; case 872: - case_872(); +#line 5865 "cs-parser.jay" + { + yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); + } + break; +case 873: + case_873(); + break; +case 874: + case_874(); break; case 875: case_875(); @@ -3838,60 +3921,36 @@ case 875: case 876: case_876(); break; -case 877: - case_877(); - break; case 878: -#line 5888 "cs-parser.jay" - { - start_block (GetLocation (yyVals[0+yyTop])); - } - break; -case 879: - case_879(); + case_878(); break; case 880: case_880(); break; case 881: -#line 5908 "cs-parser.jay" - { - report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); - } + case_881(); break; case 885: -#line 5918 "cs-parser.jay" - { - Error_SyntaxError (yyToken); - } - break; -case 887: - case_887(); + case_885(); break; case 888: -#line 5935 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } + case_888(); break; case 889: case_889(); break; case 890: - case_890(); - break; -case 891: -#line 5952 "cs-parser.jay" +#line 5979 "cs-parser.jay" { - yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); + report.Error (145, lexer.Location, "A const field requires a value to be provided"); } break; +case 891: + case_891(); + break; case 896: case_896(); break; -case 897: - case_897(); - break; case 898: case_898(); break; @@ -3902,22 +3961,19 @@ case 900: case_900(); break; case 901: - case_901(); +#line 6029 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } break; case 902: -#line 6013 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_902(); break; case 903: - case_903(); +#line 6039 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } break; case 904: -#line 6028 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } +#line 6040 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } break; case 905: case_905(); @@ -3926,43 +3982,49 @@ case 906: case_906(); break; case 907: -#line 6049 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } - break; -case 908: - case_908(); - break; -case 909: - case_909(); + case_907(); break; case 910: case_910(); break; case 911: -#line 6083 "cs-parser.jay" - { yyVal = new EmptyStatement (lexer.Location); } + case_911(); + break; +case 912: + case_912(); break; case 913: - case_913(); +#line 6112 "cs-parser.jay" + { + start_block (GetLocation (yyVals[0+yyTop])); + } break; case 914: case_914(); break; +case 915: + case_915(); + break; case 916: -#line 6107 "cs-parser.jay" - { yyVal = null; } +#line 6132 "cs-parser.jay" + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } break; -case 918: -#line 6112 "cs-parser.jay" - { yyVal = new EmptyStatement (lexer.Location); } +case 920: +#line 6142 "cs-parser.jay" + { + Error_SyntaxError (yyToken); + } break; case 922: case_922(); break; case 923: - case_923(); +#line 6159 "cs-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } break; case 924: case_924(); @@ -3971,13 +4033,22 @@ case 925: case_925(); break; case 926: - case_926(); +#line 6188 "cs-parser.jay" + { + yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); + } break; -case 927: - case_927(); +case 931: + case_931(); break; -case 928: - case_928(); +case 932: + case_932(); + break; +case 933: + case_933(); + break; +case 934: + case_934(); break; case 935: case_935(); @@ -3986,13 +4057,19 @@ case 936: case_936(); break; case 937: - case_937(); +#line 6249 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 938: case_938(); break; case 939: - case_939(); +#line 6264 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 940: case_940(); @@ -4001,7 +4078,10 @@ case 941: case_941(); break; case 942: - case_942(); +#line 6285 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 943: case_943(); @@ -4013,10 +4093,8 @@ case 945: case_945(); break; case 946: - case_946(); - break; -case 947: - case_947(); +#line 6319 "cs-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } break; case 948: case_948(); @@ -4024,27 +4102,23 @@ case 948: case 949: case_949(); break; -case 952: -#line 6358 "cs-parser.jay" - { - yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); - } +case 951: +#line 6343 "cs-parser.jay" + { yyVal = null; } break; case 953: - case_953(); - break; -case 954: - case_954(); - break; -case 955: - case_955(); - break; -case 956: - case_956(); +#line 6348 "cs-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } break; case 957: case_957(); break; +case 958: + case_958(); + break; +case 959: + case_959(); + break; case 960: case_960(); break; @@ -4057,32 +4131,8 @@ case 962: case 963: case_963(); break; -case 964: - case_964(); - break; -case 966: - case_966(); - break; -case 967: -#line 6483 "cs-parser.jay" - { - yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } - break; -case 968: -#line 6490 "cs-parser.jay" - { - yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } - break; -case 969: - case_969(); - break; case 970: -#line 6500 "cs-parser.jay" - { - yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); - } + case_970(); break; case 971: case_971(); @@ -4114,26 +4164,23 @@ case 979: case 980: case_980(); break; +case 981: + case_981(); + break; case 982: case_982(); break; case 983: -#line 6605 "cs-parser.jay" - { - Error_MissingInitializer (lexer.Location); - } + case_983(); break; case 984: case_984(); break; -case 985: - case_985(); - break; -case 986: - case_986(); - break; case 987: - case_987(); +#line 6594 "cs-parser.jay" + { + yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); + } break; case 988: case_988(); @@ -4150,20 +4197,8 @@ case 991: case 992: case_992(); break; -case 993: -#line 6710 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } - break; -case 994: - case_994(); - break; case 995: -#line 6725 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_995(); break; case 996: case_996(); @@ -4174,62 +4209,89 @@ case 997: case 998: case_998(); break; +case 999: +#line 6685 "cs-parser.jay" + { + yyVal = yyVals[-1+yyTop]; + } + break; case 1000: case_1000(); break; case 1001: - case_1001(); +#line 6697 "cs-parser.jay" + { + lexer.parsing_catch_when = false; + } break; case 1002: -#line 6789 "cs-parser.jay" +#line 6701 "cs-parser.jay" { - current_block = new Linq.QueryBlock (current_block, lexer.Location); + lexer.parsing_catch_when = false; } break; case 1003: case_1003(); break; case 1004: - case_1004(); +#line 6716 "cs-parser.jay" + { + yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 1005: - case_1005(); +#line 6723 "cs-parser.jay" + { + yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 1006: case_1006(); break; case 1007: -#line 6828 "cs-parser.jay" +#line 6733 "cs-parser.jay" { - yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; + yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 1008: case_1008(); break; +case 1009: + case_1009(); + break; case 1010: case_1010(); break; +case 1011: + case_1011(); + break; +case 1012: + case_1012(); + break; +case 1013: + case_1013(); + break; +case 1014: + case_1014(); + break; +case 1015: + case_1015(); + break; case 1016: -#line 6857 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_1016(); break; case 1017: case_1017(); break; -case 1018: -#line 6876 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } - break; case 1019: case_1019(); break; case 1020: - case_1020(); +#line 6838 "cs-parser.jay" + { + Error_MissingInitializer (lexer.Location); + } break; case 1021: case_1021(); @@ -4252,44 +4314,53 @@ case 1026: case 1027: case_1027(); break; +case 1028: + case_1028(); + break; case 1029: case_1029(); break; case 1030: - case_1030(); +#line 6943 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 1031: case_1031(); break; +case 1032: +#line 6958 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; case 1033: case_1033(); break; case 1034: case_1034(); break; -case 1036: - case_1036(); +case 1035: + case_1035(); break; case 1037: case_1037(); break; case 1038: -#line 7077 "cs-parser.jay" - { - yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } + case_1038(); break; case 1039: - case_1039(); +#line 7022 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 1040: case_1040(); break; case 1041: -#line 7094 "cs-parser.jay" - { - yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } + case_1041(); break; case 1042: case_1042(); @@ -4297,29 +4368,44 @@ case 1042: case 1043: case_1043(); break; +case 1044: +#line 7061 "cs-parser.jay" + { + yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; + } + break; case 1045: case_1045(); break; -case 1046: - case_1046(); +case 1047: + case_1047(); break; -case 1049: - case_1049(); +case 1053: +#line 7090 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; -case 1050: - case_1050(); +case 1054: + case_1054(); break; -case 1058: -#line 7219 "cs-parser.jay" +case 1055: +#line 7109 "cs-parser.jay" { - module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; + current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; +case 1056: + case_1056(); + break; +case 1057: + case_1057(); + break; +case 1058: + case_1058(); + break; case 1059: -#line 7226 "cs-parser.jay" - { - module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; - } + case_1059(); break; case 1060: case_1060(); @@ -4331,19 +4417,10 @@ case 1062: case_1062(); break; case 1063: -#line 7249 "cs-parser.jay" - { - yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); - } + case_1063(); break; case 1064: -#line 7253 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } - break; -case 1065: - case_1065(); + case_1064(); break; case 1066: case_1066(); @@ -4355,37 +4432,130 @@ case 1068: case_1068(); break; case 1070: -#line 7289 "cs-parser.jay" + case_1070(); + break; +case 1071: + case_1071(); + break; +case 1073: + case_1073(); + break; +case 1074: + case_1074(); + break; +case 1075: +#line 7310 "cs-parser.jay" + { + yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; +case 1076: + case_1076(); + break; +case 1077: + case_1077(); + break; +case 1078: +#line 7327 "cs-parser.jay" + { + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; +case 1079: + case_1079(); + break; +case 1080: + case_1080(); + break; +case 1082: + case_1082(); + break; +case 1083: + case_1083(); + break; +case 1086: + case_1086(); + break; +case 1087: + case_1087(); + break; +case 1095: +#line 7452 "cs-parser.jay" + { + module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; + } + break; +case 1096: +#line 7459 "cs-parser.jay" + { + module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; + } + break; +case 1097: + case_1097(); + break; +case 1098: + case_1098(); + break; +case 1099: + case_1099(); + break; +case 1100: +#line 7482 "cs-parser.jay" + { + yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); + } + break; +case 1101: +#line 7486 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 1102: + case_1102(); + break; +case 1103: + case_1103(); + break; +case 1104: + case_1104(); + break; +case 1105: + case_1105(); + break; +case 1107: +#line 7522 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; -case 1072: -#line 7297 "cs-parser.jay" +case 1109: +#line 7530 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 1073: -#line 7301 "cs-parser.jay" +case 1110: +#line 7534 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; -case 1074: -#line 7308 "cs-parser.jay" +case 1111: +#line 7541 "cs-parser.jay" { yyVal = new List<DocumentationParameter> (0); } break; -case 1076: - case_1076(); +case 1113: + case_1113(); break; -case 1077: - case_1077(); +case 1114: + case_1114(); break; -case 1078: - case_1078(); +case 1115: + case_1115(); break; #line default } @@ -4423,7 +4593,7 @@ case 1078: All more than 3 lines long rules are wrapped into a method */ void case_6() -#line 397 "cs-parser.jay" +#line 400 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { Attributes attrs = (Attributes) yyVals[0+yyTop]; @@ -4435,7 +4605,7 @@ void case_6() } void case_8() -#line 411 "cs-parser.jay" +#line 414 "cs-parser.jay" { if (yyToken == Token.EXTERN_ALIAS) report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements"); @@ -4444,7 +4614,7 @@ void case_8() } void case_13() -#line 431 "cs-parser.jay" +#line 434 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -4467,23 +4637,32 @@ void case_13() } void case_17() -#line 464 "cs-parser.jay" +#line 467 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_18() -#line 472 "cs-parser.jay" +#line 475 "cs-parser.jay" { - var un = new UsingNamespace ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); - current_namespace.AddUsing (un); - - lbag.AddLocation (un, GetLocation (yyVals[0+yyTop])); + UsingClause uc; + if (yyVals[-2+yyTop] != null) { + if (lang_version <= LanguageVersion.V_5) + FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "using static"); + + uc = new UsingType ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (uc, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } else { + uc = new UsingNamespace ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (uc, GetLocation (yyVals[0+yyTop])); + } + + current_namespace.AddUsing (uc); } void case_19() -#line 479 "cs-parser.jay" +#line 491 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { @@ -4491,20 +4670,25 @@ void case_19() "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); } - var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); + if (yyVals[-4+yyTop] != null) { + report.Error (8085, GetLocation (yyVals[-4+yyTop]), "A `using static' directive cannot be used to declare an alias"); + } + + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); current_namespace.AddUsing (un); + lbag.AddLocation (un, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_20() -#line 491 "cs-parser.jay" +#line 508 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_21() -#line 504 "cs-parser.jay" +void case_23() +#line 526 "cs-parser.jay" { Attributes attrs = (Attributes) yyVals[-2+yyTop]; var name = (MemberName) yyVals[0+yyTop]; @@ -4533,15 +4717,15 @@ void case_21() current_container = current_namespace = ns; } -void case_22() -#line 532 "cs-parser.jay" +void case_24() +#line 554 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_23() -#line 537 "cs-parser.jay" +void case_25() +#line 559 "cs-parser.jay" { if (yyVals[0+yyTop] != null) lbag.AddLocation (current_container, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); @@ -4551,8 +4735,8 @@ void case_23() current_container = current_namespace = current_namespace.Parent; } -void case_24() -#line 546 "cs-parser.jay" +void case_26() +#line 568 "cs-parser.jay" { report.Error (1514, lexer.Location, "Unexpected symbol `{0}', expecting `.' or `{{'", GetSymbolName (yyToken)); @@ -4562,37 +4746,37 @@ void case_24() current_namespace.AddTypeContainer (ns); } -void case_27() -#line 560 "cs-parser.jay" +void case_29() +#line 582 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_28() -#line 568 "cs-parser.jay" +void case_30() +#line 590 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName (lt.Value, lt.Location); } -void case_29() -#line 573 "cs-parser.jay" +void case_31() +#line 595 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_30() -#line 579 "cs-parser.jay" +void case_32() +#line 601 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new MemberName ("<invalid>", lexer.Location); } -void case_43() -#line 617 "cs-parser.jay" +void case_45() +#line 639 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { TypeContainer ds = (TypeContainer)yyVals[0+yyTop]; @@ -4612,23 +4796,23 @@ void case_43() current_namespace.DeclarationFound = true; } -void case_45() -#line 639 "cs-parser.jay" +void case_47() +#line 661 "cs-parser.jay" { current_namespace.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; report.Error (1518, lexer.Location, "Attributes must be attached to class, delegate, enum, interface or struct"); lexer.putback ('}'); } -void case_53() -#line 672 "cs-parser.jay" +void case_55() +#line 694 "cs-parser.jay" { var sect = (List<Attribute>) yyVals[0+yyTop]; yyVal = new Attributes (sect); } -void case_54() -#line 677 "cs-parser.jay" +void case_56() +#line 699 "cs-parser.jay" { Attributes attrs = yyVals[-1+yyTop] as Attributes; var sect = (List<Attribute>) yyVals[0+yyTop]; @@ -4639,22 +4823,22 @@ void case_54() yyVal = attrs; } -void case_55() -#line 690 "cs-parser.jay" +void case_57() +#line 712 "cs-parser.jay" { PushLocation (GetLocation (yyVals[0+yyTop])); lexer.parsing_attribute_section = true; } -void case_56() -#line 695 "cs-parser.jay" +void case_58() +#line 717 "cs-parser.jay" { lexer.parsing_attribute_section = false; yyVal = yyVals[0+yyTop]; } -void case_57() -#line 703 "cs-parser.jay" +void case_59() +#line 725 "cs-parser.jay" { current_attr_target = (string) yyVals[-1+yyTop]; if (current_attr_target == "assembly" || current_attr_target == "module") { @@ -4662,8 +4846,8 @@ void case_57() } } -void case_58() -#line 710 "cs-parser.jay" +void case_60() +#line 732 "cs-parser.jay" { /* when attribute target is invalid*/ if (current_attr_target == string.Empty) @@ -4683,8 +4867,8 @@ void case_58() lexer.parsing_attribute_section = false; } -void case_59() -#line 729 "cs-parser.jay" +void case_61() +#line 751 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; lbag.InsertLocation (yyVal, 0, PopLocation ()); @@ -4695,8 +4879,8 @@ void case_59() } } -void case_60() -#line 739 "cs-parser.jay" +void case_62() +#line 761 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -4708,23 +4892,25 @@ void case_60() }; } -void case_61() -#line 750 "cs-parser.jay" +void case_63() +#line 772 "cs-parser.jay" { - CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation (yyVals[0+yyTop])); + if (CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation (yyVals[0+yyTop])).Length > 0) + Error_SyntaxError (yyToken); + yyVal = null; } -void case_62() -#line 758 "cs-parser.jay" +void case_64() +#line 782 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = CheckAttributeTarget (yyToken, lt.Value, lt.Location); PushLocation (GetLocation (yyVals[0+yyTop])); } -void case_66() -#line 773 "cs-parser.jay" +void case_68() +#line 797 "cs-parser.jay" { var attrs = (List<Attribute>) yyVals[-2+yyTop]; if (attrs != null) { @@ -4735,8 +4921,8 @@ void case_66() yyVal = attrs; } -void case_68() -#line 790 "cs-parser.jay" +void case_70() +#line 814 "cs-parser.jay" { --lexer.parsing_block; @@ -4757,8 +4943,8 @@ void case_68() } } -void case_71() -#line 818 "cs-parser.jay" +void case_73() +#line 842 "cs-parser.jay" { savedAttrParenOpenLocation = GetLocation (yyVals[-2+yyTop]); savedAttrParenCloseLocation = GetLocation (yyVals[0+yyTop]); @@ -4766,24 +4952,24 @@ void case_71() HadAttributeParens = true; } -void case_73() -#line 830 "cs-parser.jay" +void case_75() +#line 854 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); yyVal = new Arguments [] { a, null }; } -void case_74() -#line 836 "cs-parser.jay" +void case_76() +#line 860 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); yyVal = new Arguments [] { null, a }; } -void case_75() -#line 842 "cs-parser.jay" +void case_77() +#line 866 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] != null) { @@ -4799,8 +4985,8 @@ void case_75() attributeArgumentCommas.Add (GetLocation (yyVals[-1+yyTop])); } -void case_76() -#line 857 "cs-parser.jay" +void case_78() +#line 881 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] == null) { @@ -4811,15 +4997,15 @@ void case_76() attributeArgumentCommas.Add (GetLocation (yyVals[-1+yyTop])); } -void case_79() -#line 875 "cs-parser.jay" +void case_81() +#line 899 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_81() -#line 887 "cs-parser.jay" +void case_83() +#line 911 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -4827,8 +5013,8 @@ void case_81() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } -void case_82() -#line 897 "cs-parser.jay" +void case_84() +#line 921 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "named argument"); @@ -4841,22 +5027,22 @@ void case_82() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } -void case_88() -#line 929 "cs-parser.jay" +void case_91() +#line 958 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_89() -#line 934 "cs-parser.jay" +void case_92() +#line 963 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_103() -#line 955 "cs-parser.jay" +void case_106() +#line 984 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", GetSymbolName (yyToken)); @@ -4864,8 +5050,8 @@ void case_103() lexer.parsing_generic_declaration = false; } -void case_104() -#line 965 "cs-parser.jay" +void case_107() +#line 994 "cs-parser.jay" { current_local_parameters = current_type.PrimaryConstructorParameters; if (current_local_parameters == null) { @@ -4877,8 +5063,8 @@ void case_104() start_block (GetLocation (yyVals[0+yyTop])); } -void case_105() -#line 976 "cs-parser.jay" +void case_108() +#line 1005 "cs-parser.jay" { current_local_parameters = null; var t = current_type as ClassOrStruct; @@ -4892,8 +5078,8 @@ void case_105() } } -void case_107() -#line 998 "cs-parser.jay" +void case_110() +#line 1027 "cs-parser.jay" { lexer.ConstraintsParsing = true; valid_param_mod = ParameterModifierType.PrimaryConstructor; @@ -4901,8 +5087,8 @@ void case_107() lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } -void case_108() -#line 1007 "cs-parser.jay" +void case_111() +#line 1036 "cs-parser.jay" { valid_param_mod = 0; lexer.ConstraintsParsing = false; @@ -4920,23 +5106,23 @@ void case_108() lexer.parsing_modifiers = true; } -void case_109() -#line 1024 "cs-parser.jay" +void case_112() +#line 1053 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_110() -#line 1029 "cs-parser.jay" +void case_113() +#line 1058 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_111() -#line 1035 "cs-parser.jay" +void case_114() +#line 1064 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -4946,8 +5132,8 @@ void case_111() yyVal = pop_current_class (); } -void case_113() -#line 1053 "cs-parser.jay" +void case_116() +#line 1082 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var mod = (Modifiers) yyVals[-3+yyTop]; @@ -4961,8 +5147,8 @@ void case_113() yyVal = current_field; } -void case_114() -#line 1066 "cs-parser.jay" +void case_117() +#line 1095 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4974,39 +5160,39 @@ void case_114() current_field = null; } -void case_115() -#line 1079 "cs-parser.jay" +void case_118() +#line 1108 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.AddMember (new Const (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], MemberName.Null, (Attributes) yyVals[-4+yyTop])); } -void case_120() -#line 1104 "cs-parser.jay" +void case_123() +#line 1133 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_122() -#line 1117 "cs-parser.jay" +void case_125() +#line 1146 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_123() -#line 1123 "cs-parser.jay" +void case_126() +#line 1152 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); yyVal = null; } -void case_126() -#line 1138 "cs-parser.jay" +void case_129() +#line 1167 "cs-parser.jay" { lexer.parsing_generic_declaration = false; @@ -5020,8 +5206,8 @@ void case_126() yyVal = current_field; } -void case_127() -#line 1153 "cs-parser.jay" +void case_130() +#line 1182 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -5033,8 +5219,8 @@ void case_127() current_field = null; } -void case_128() -#line 1166 "cs-parser.jay" +void case_131() +#line 1195 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "fixed size buffers"); @@ -5046,8 +5232,8 @@ void case_128() current_type.AddField (current_field); } -void case_129() -#line 1177 "cs-parser.jay" +void case_132() +#line 1206 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -5060,16 +5246,16 @@ void case_129() current_field = null; } -void case_132() -#line 1200 "cs-parser.jay" +void case_135() +#line 1229 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; start_block (GetLocation (yyVals[0+yyTop])); } -void case_133() -#line 1206 "cs-parser.jay" +void case_136() +#line 1235 "cs-parser.jay" { --lexer.parsing_block; current_field.Initializer = (Expression) yyVals[0+yyTop]; @@ -5078,16 +5264,16 @@ void case_133() current_local_parameters = null; } -void case_138() -#line 1233 "cs-parser.jay" +void case_141() +#line 1262 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_140() -#line 1243 "cs-parser.jay" +void case_143() +#line 1272 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -5095,39 +5281,39 @@ void case_140() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_145() -#line 1269 "cs-parser.jay" +void case_148() +#line 1298 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_147() -#line 1282 "cs-parser.jay" +void case_150() +#line 1311 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_148() -#line 1288 "cs-parser.jay" +void case_151() +#line 1317 "cs-parser.jay" { report.Error (443, lexer.Location, "Value or constant expected"); yyVal = null; } -void case_151() -#line 1298 "cs-parser.jay" +void case_154() +#line 1327 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); yyVal = null; } -void case_152() -#line 1307 "cs-parser.jay" +void case_155() +#line 1336 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.NotAllowed; @@ -5135,8 +5321,8 @@ void case_152() /* Was added earlier in the case of body being eof for full ast*/ } -void case_153() -#line 1314 "cs-parser.jay" +void case_156() +#line 1343 "cs-parser.jay" { Method method = (Method) yyVals[-2+yyTop]; method.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5163,8 +5349,8 @@ void case_153() Lexer.doc_state = XmlCommentState.Allowed; } -void case_155() -#line 1350 "cs-parser.jay" +void case_158() +#line 1379 "cs-parser.jay" { valid_param_mod = 0; MemberName name = (MemberName) yyVals[-4+yyTop]; @@ -5186,8 +5372,8 @@ void case_155() lexer.ConstraintsParsing = true; } -void case_156() -#line 1371 "cs-parser.jay" +void case_159() +#line 1400 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5199,15 +5385,15 @@ void case_156() yyVal = yyVals[-1+yyTop]; } -void case_158() -#line 1390 "cs-parser.jay" +void case_161() +#line 1419 "cs-parser.jay" { lexer.parsing_generic_declaration = false; valid_param_mod = ParameterModifierType.All; } -void case_160() -#line 1399 "cs-parser.jay" +void case_163() +#line 1428 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -5236,8 +5422,8 @@ void case_160() yyVal = method; } -void case_161() -#line 1430 "cs-parser.jay" +void case_164() +#line 1459 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-3+yyTop]; report.Error (1585, name.Location, @@ -5256,8 +5442,8 @@ void case_161() yyVal = method; } -void case_162() -#line 1451 "cs-parser.jay" +void case_165() +#line 1480 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.Undefined; @@ -5274,8 +5460,8 @@ void case_162() yyVal = method; } -void case_167() -#line 1480 "cs-parser.jay" +void case_170() +#line 1509 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) { FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "expression bodied members"); @@ -5285,8 +5471,8 @@ void case_167() start_block (GetLocation (yyVals[0+yyTop])); } -void case_168() -#line 1489 "cs-parser.jay" +void case_171() +#line 1518 "cs-parser.jay" { lexer.parsing_block = 0; current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); @@ -5295,16 +5481,16 @@ void case_168() yyVal = b; } -void case_171() -#line 1505 "cs-parser.jay" +void case_174() +#line 1534 "cs-parser.jay" { var pars_list = (List<Parameter>) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); lbag.AddLocation (yyVal, parameterListCommas); } -void case_172() -#line 1511 "cs-parser.jay" +void case_175() +#line 1540 "cs-parser.jay" { var pars_list = (List<Parameter>) yyVals[-2+yyTop]; pars_list.Add ((Parameter) yyVals[0+yyTop]); @@ -5314,8 +5500,8 @@ void case_172() lbag.AddLocation (yyVal, parameterListCommas); } -void case_173() -#line 1520 "cs-parser.jay" +void case_176() +#line 1549 "cs-parser.jay" { var pars_list = (List<Parameter>) yyVals[-2+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop]))); @@ -5325,8 +5511,8 @@ void case_173() lbag.AddLocation (yyVal, parameterListCommas); } -void case_174() -#line 1529 "cs-parser.jay" +void case_177() +#line 1558 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); @@ -5335,8 +5521,8 @@ void case_174() lbag.AddLocation (yyVal, parameterListCommas); } -void case_175() -#line 1537 "cs-parser.jay" +void case_178() +#line 1566 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); @@ -5350,8 +5536,8 @@ void case_175() lbag.AddLocation (yyVal, parameterListCommas); } -void case_176() -#line 1550 "cs-parser.jay" +void case_179() +#line 1579 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -5359,8 +5545,8 @@ void case_176() lbag.AddLocation (yyVal, parameterListCommas); } -void case_177() -#line 1557 "cs-parser.jay" +void case_180() +#line 1586 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -5373,15 +5559,15 @@ void case_177() lbag.AddLocation (yyVal, parameterListCommas); } -void case_180() -#line 1577 "cs-parser.jay" +void case_183() +#line 1606 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = ParametersCompiled.EmptyReadOnlyParameters; } -void case_181() -#line 1585 "cs-parser.jay" +void case_184() +#line 1614 "cs-parser.jay" { parameters_bucket.Clear (); Parameter p = (Parameter) yyVals[0+yyTop]; @@ -5391,8 +5577,8 @@ void case_181() yyVal = parameters_bucket; } -void case_182() -#line 1594 "cs-parser.jay" +void case_185() +#line 1623 "cs-parser.jay" { var pars = (List<Parameter>) yyVals[-2+yyTop]; Parameter p = (Parameter) yyVals[0+yyTop]; @@ -5411,16 +5597,16 @@ void case_182() yyVal = yyVals[-2+yyTop]; } -void case_183() -#line 1618 "cs-parser.jay" +void case_186() +#line 1647 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location); lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_184() -#line 1627 "cs-parser.jay" +void case_187() +#line 1656 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); @@ -5428,16 +5614,16 @@ void case_184() lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_185() -#line 1634 "cs-parser.jay" +void case_188() +#line 1663 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); yyVal = new Parameter (null, null, Parameter.Modifier.NONE, (Attributes) yyVals[-1+yyTop], l); } -void case_186() -#line 1643 "cs-parser.jay" +void case_189() +#line 1672 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); @@ -5445,8 +5631,8 @@ void case_186() lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_188() -#line 1658 "cs-parser.jay" +void case_191() +#line 1687 "cs-parser.jay" { --lexer.parsing_block; if (lang_version <= LanguageVersion.V_3) { @@ -5484,8 +5670,8 @@ void case_188() ((Parameter) yyVal).DefaultValue = new DefaultParameterValueExpression ((Expression) yyVals[0+yyTop]); } -void case_192() -#line 1707 "cs-parser.jay" +void case_195() +#line 1736 "cs-parser.jay" { Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; @@ -5507,8 +5693,8 @@ void case_192() yyVal = mod; } -void case_193() -#line 1731 "cs-parser.jay" +void case_196() +#line 1760 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Ref) == 0) Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop])); @@ -5516,8 +5702,8 @@ void case_193() yyVal = Parameter.Modifier.REF; } -void case_194() -#line 1738 "cs-parser.jay" +void case_197() +#line 1767 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Out) == 0) Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop])); @@ -5525,8 +5711,8 @@ void case_194() yyVal = Parameter.Modifier.OUT; } -void case_195() -#line 1745 "cs-parser.jay" +void case_198() +#line 1774 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.This) == 0) Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop])); @@ -5537,16 +5723,16 @@ void case_195() yyVal = Parameter.Modifier.This; } -void case_196() -#line 1758 "cs-parser.jay" +void case_199() +#line 1787 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location); lbag.AddLocation (yyVal, savedLocation); } -void case_197() -#line 1764 "cs-parser.jay" +void case_200() +#line 1793 "cs-parser.jay" { report.Error (1751, GetLocation (yyVals[-4+yyTop]), "Cannot specify a default value for a parameter array"); @@ -5555,24 +5741,24 @@ void case_197() lbag.AddLocation (yyVal, savedLocation); } -void case_198() -#line 1772 "cs-parser.jay" +void case_201() +#line 1801 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], null, (Attributes) yyVals[-3+yyTop], Location.Null); } -void case_199() -#line 1781 "cs-parser.jay" +void case_202() +#line 1810 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Params) == 0) report.Error (1670, (GetLocation (yyVals[0+yyTop])), "The `params' modifier is not allowed in current context"); savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_200() -#line 1787 "cs-parser.jay" +void case_203() +#line 1816 "cs-parser.jay" { Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop]; if ((mod & Parameter.Modifier.This) != 0) { @@ -5583,23 +5769,23 @@ void case_200() savedLocation = GetLocation (yyVals[-1+yyTop]); } -void case_202() -#line 1804 "cs-parser.jay" +void case_205() +#line 1833 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Arglist) == 0) report.Error (1669, GetLocation (yyVals[0+yyTop]), "__arglist is not valid in this context"); } -void case_203() -#line 1815 "cs-parser.jay" +void case_206() +#line 1844 "cs-parser.jay" { lexer.parsing_generic_declaration = false; if (doc_support) tmpComment = Lexer.consume_doc_comment (); } -void case_204() -#line 1821 "cs-parser.jay" +void case_207() +#line 1850 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; current_property = new Property (current_type, type, (Modifiers) yyVals[-4+yyTop], @@ -5614,8 +5800,8 @@ void case_204() lexer.PropertyParsing = true; } -void case_205() -#line 1835 "cs-parser.jay" +void case_208() +#line 1864 "cs-parser.jay" { lexer.PropertyParsing = false; @@ -5623,15 +5809,15 @@ void case_205() current_property.DocComment = ConsumeStoredComment (); } -void case_206() -#line 1842 "cs-parser.jay" +void case_209() +#line 1871 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop])); lexer.parsing_modifiers = true; } -void case_208() -#line 1854 "cs-parser.jay" +void case_211() +#line 1883 "cs-parser.jay" { lexer.parsing_generic_declaration = false; if (doc_support) @@ -5639,8 +5825,8 @@ void case_208() current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; } -void case_209() -#line 1861 "cs-parser.jay" +void case_212() +#line 1890 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; var property = new Property (current_type, type, (Modifiers) yyVals[-4+yyTop], @@ -5662,16 +5848,16 @@ void case_209() current_local_parameters = null; } -void case_211() -#line 1886 "cs-parser.jay" +void case_214() +#line 1915 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; start_block (GetLocation (yyVals[0+yyTop])); } -void case_212() -#line 1892 "cs-parser.jay" +void case_215() +#line 1921 "cs-parser.jay" { --lexer.parsing_block; ((Property)current_property).Initializer = (Expression) yyVals[-1+yyTop]; @@ -5680,8 +5866,8 @@ void case_212() current_local_parameters = null; } -void case_216() -#line 1913 "cs-parser.jay" +void case_219() +#line 1942 "cs-parser.jay" { valid_param_mod = 0; var type = (FullNamedExpression) yyVals[-5+yyTop]; @@ -5708,8 +5894,8 @@ void case_216() current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop]; } -void case_217() -#line 1939 "cs-parser.jay" +void case_220() +#line 1968 "cs-parser.jay" { lexer.PropertyParsing = false; current_local_parameters = null; @@ -5723,15 +5909,15 @@ void case_217() current_property = null; } -void case_219() -#line 1959 "cs-parser.jay" +void case_222() +#line 1988 "cs-parser.jay" { current_property.Get = new Indexer.GetIndexerMethod (current_property, Modifiers.COMPILER_GENERATED, current_local_parameters, null, current_property.Location); current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; } -void case_224() -#line 1971 "cs-parser.jay" +void case_227() +#line 2000 "cs-parser.jay" { if (yyToken == Token.CLOSE_BRACE) { report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ()); @@ -5743,8 +5929,8 @@ void case_224() } } -void case_225() -#line 1985 "cs-parser.jay" +void case_228() +#line 2014 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5766,8 +5952,8 @@ void case_225() lexer.PropertyParsing = false; } -void case_226() -#line 2006 "cs-parser.jay" +void case_229() +#line 2035 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5789,8 +5975,8 @@ void case_226() Lexer.doc_state = XmlCommentState.NotAllowed; } -void case_227() -#line 2030 "cs-parser.jay" +void case_230() +#line 2059 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5817,8 +6003,8 @@ void case_227() lexer.PropertyParsing = false; } -void case_228() -#line 2056 "cs-parser.jay" +void case_231() +#line 2085 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5840,30 +6026,30 @@ void case_228() Lexer.doc_state = XmlCommentState.NotAllowed; } -void case_230() -#line 2081 "cs-parser.jay" +void case_233() +#line 2110 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } -void case_231() -#line 2086 "cs-parser.jay" +void case_234() +#line 2115 "cs-parser.jay" { Error_SyntaxError (1043, yyToken, "Invalid accessor body"); yyVal = null; } -void case_233() -#line 2100 "cs-parser.jay" +void case_236() +#line 2129 "cs-parser.jay" { lexer.ConstraintsParsing = true; push_current_container (new Interface (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } -void case_234() -#line 2107 "cs-parser.jay" +void case_237() +#line 2136 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5878,16 +6064,16 @@ void case_234() lexer.parsing_modifiers = true; } -void case_235() -#line 2121 "cs-parser.jay" +void case_238() +#line 2150 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_236() -#line 2127 "cs-parser.jay" +void case_239() +#line 2156 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -5897,22 +6083,22 @@ void case_236() yyVal = pop_current_class (); } -void case_240() -#line 2148 "cs-parser.jay" +void case_243() +#line 2177 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_241() -#line 2153 "cs-parser.jay" +void case_244() +#line 2182 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_252() -#line 2191 "cs-parser.jay" +void case_255() +#line 2220 "cs-parser.jay" { OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop]; if (decl != null) { @@ -5941,15 +6127,23 @@ void case_252() current_local_parameters = null; } -void case_254() -#line 2223 "cs-parser.jay" +void case_257() +#line 2252 "cs-parser.jay" { report.Error (590, GetLocation (yyVals[0+yyTop]), "User-defined operators cannot return void"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_256() -#line 2235 "cs-parser.jay" +void case_258() +#line 2260 "cs-parser.jay" +{ + valid_param_mod = ParameterModifierType.DefaultValue; + if ((Operator.OpType) yyVals[-1+yyTop] == Operator.OpType.Is) + valid_param_mod |= ParameterModifierType.Out; + } + +void case_259() +#line 2266 "cs-parser.jay" { valid_param_mod = 0; @@ -5972,6 +6166,8 @@ void case_256() report.Error (1535, loc, "Overloaded unary operator `{0}' takes one parameter", Operator.GetName (op)); } + } else if (op == Operator.OpType.Is) { + /* TODO: Special checks for is operator*/ } else { if (p_count == 1) { report.Error (1019, loc, "Overloadable unary operator expected"); @@ -5990,8 +6186,17 @@ void case_256() lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), savedOperatorLocation, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_281() -#line 2311 "cs-parser.jay" +void case_283() +#line 2337 "cs-parser.jay" +{ + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "is user operator"); + savedOperatorLocation = GetLocation (yyVals[0+yyTop]); + yyVal = Operator.OpType.Is; + } + +void case_285() +#line 2351 "cs-parser.jay" { valid_param_mod = 0; @@ -6011,8 +6216,8 @@ void case_281() lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_283() -#line 2334 "cs-parser.jay" +void case_287() +#line 2374 "cs-parser.jay" { valid_param_mod = 0; @@ -6032,24 +6237,24 @@ void case_283() lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_284() -#line 2353 "cs-parser.jay" +void case_288() +#line 2393 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; yyVal = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation (yyVals[-1+yyTop])); } -void case_285() -#line 2359 "cs-parser.jay" +void case_289() +#line 2399 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; yyVal = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation (yyVals[-1+yyTop])); } -void case_286() -#line 2369 "cs-parser.jay" +void case_290() +#line 2409 "cs-parser.jay" { Constructor c = (Constructor) yyVals[-1+yyTop]; c.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -6062,8 +6267,8 @@ void case_286() Lexer.doc_state = XmlCommentState.Allowed; } -void case_287() -#line 2386 "cs-parser.jay" +void case_291() +#line 2426 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -6073,8 +6278,8 @@ void case_287() valid_param_mod = ParameterModifierType.All; } -void case_288() -#line 2395 "cs-parser.jay" +void case_292() +#line 2435 "cs-parser.jay" { valid_param_mod = 0; current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop]; @@ -6086,11 +6291,25 @@ void case_288() if (lt.Value != current_container.MemberName.Name) { report.Error (1520, c.Location, "Class, struct, or interface method must have a return type"); } else if ((mods & Modifiers.STATIC) != 0) { + if (!current_local_parameters.IsEmpty) { + report.Error (132, c.Location, "`{0}': The static constructor must be parameterless", + c.GetSignatureForError ()); + } + if ((mods & Modifiers.AccessibilityMask) != 0){ report.Error (515, c.Location, "`{0}': static constructor cannot have an access modifier", c.GetSignatureForError ()); } + } else { + if (current_type.Kind == MemberKind.Struct && current_local_parameters.IsEmpty) { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation (yyVals[-4+yyTop]), "struct parameterless instance constructor"); + + if ((mods & Modifiers.PUBLIC) == 0) { + report.Error (8075, c.Location, "`{0}': Structs parameterless instance constructor must be public", c.GetSignatureForError ()); + } + } } current_type.AddConstructor (c); @@ -6104,8 +6323,8 @@ void case_288() start_block (lexer.Location); } -void case_289() -#line 2424 "cs-parser.jay" +void case_293() +#line 2478 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { var c = (Constructor) yyVals[-1+yyTop]; @@ -6121,39 +6340,39 @@ void case_289() yyVal = yyVals[-1+yyTop]; } -void case_295() -#line 2456 "cs-parser.jay" +void case_299() +#line 2510 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorBaseInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_297() -#line 2466 "cs-parser.jay" +void case_301() +#line 2520 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorThisInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_298() -#line 2472 "cs-parser.jay" +void case_302() +#line 2526 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ConstructorThisInitializer (null, GetLocation (yyVals[0+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_299() -#line 2478 "cs-parser.jay" +void case_303() +#line 2532 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_300() -#line 2486 "cs-parser.jay" +void case_304() +#line 2540 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -6163,8 +6382,8 @@ void case_300() current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; } -void case_301() -#line 2495 "cs-parser.jay" +void case_305() +#line 2549 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; if (lt.Value != current_container.MemberName.Name){ @@ -6186,8 +6405,8 @@ void case_301() current_local_parameters = null; } -void case_302() -#line 2521 "cs-parser.jay" +void case_306() +#line 2575 "cs-parser.jay" { current_event_field = new EventField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], (MemberName) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop]); current_type.AddMember (current_event_field); @@ -6200,8 +6419,8 @@ void case_302() yyVal = current_event_field; } -void case_303() -#line 2535 "cs-parser.jay" +void case_307() +#line 2589 "cs-parser.jay" { if (doc_support) { current_event_field.DocComment = Lexer.consume_doc_comment (); @@ -6215,8 +6434,8 @@ void case_303() current_event_field = null; } -void case_304() -#line 2551 "cs-parser.jay" +void case_308() +#line 2605 "cs-parser.jay" { current_event = new EventProperty (current_type, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-4+yyTop], (MemberName) yyVals[-1+yyTop], (Attributes) yyVals[-5+yyTop]); current_type.AddMember (current_event); @@ -6225,8 +6444,8 @@ void case_304() lexer.EventParsing = true; } -void case_305() -#line 2559 "cs-parser.jay" +void case_309() +#line 2613 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) report.Error (69, GetLocation (yyVals[-2+yyTop]), "Event in interface cannot have add or remove accessors"); @@ -6234,8 +6453,8 @@ void case_305() lexer.EventParsing = false; } -void case_306() -#line 2566 "cs-parser.jay" +void case_310() +#line 2620 "cs-parser.jay" { if (doc_support) { current_event.DocComment = Lexer.consume_doc_comment (); @@ -6247,32 +6466,32 @@ void case_306() current_local_parameters = null; } -void case_307() -#line 2579 "cs-parser.jay" +void case_311() +#line 2633 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.AddMember (new EventField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], MemberName.Null, (Attributes) yyVals[-4+yyTop])); } -void case_310() -#line 2593 "cs-parser.jay" +void case_314() +#line 2647 "cs-parser.jay" { --lexer.parsing_block; savedEventAssignLocation = GetLocation (yyVals[-2+yyTop]); current_event_field.Initializer = (Expression) yyVals[0+yyTop]; } -void case_315() -#line 2618 "cs-parser.jay" +void case_319() +#line 2672 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_317() -#line 2628 "cs-parser.jay" +void case_321() +#line 2682 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -6280,8 +6499,8 @@ void case_317() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_318() -#line 2637 "cs-parser.jay" +void case_322() +#line 2691 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) { report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer", @@ -6294,29 +6513,29 @@ void case_318() } } -void case_322() -#line 2658 "cs-parser.jay" +void case_326() +#line 2712 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } -void case_323() -#line 2663 "cs-parser.jay" +void case_327() +#line 2717 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } -void case_324() -#line 2668 "cs-parser.jay" +void case_328() +#line 2722 "cs-parser.jay" { report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected"); yyVal = null; } -void case_325() -#line 2676 "cs-parser.jay" +void case_329() +#line 2730 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -6329,8 +6548,8 @@ void case_325() lexer.EventParsing = false; } -void case_326() -#line 2688 "cs-parser.jay" +void case_330() +#line 2742 "cs-parser.jay" { lexer.EventParsing = true; @@ -6344,8 +6563,8 @@ void case_326() current_local_parameters = null; } -void case_327() -#line 2704 "cs-parser.jay" +void case_331() +#line 2758 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -6358,8 +6577,8 @@ void case_327() lexer.EventParsing = false; } -void case_328() -#line 2716 "cs-parser.jay" +void case_332() +#line 2770 "cs-parser.jay" { lexer.EventParsing = true; @@ -6373,23 +6592,23 @@ void case_328() current_local_parameters = null; } -void case_329() -#line 2732 "cs-parser.jay" +void case_333() +#line 2786 "cs-parser.jay" { report.Error (73, lexer.Location, "An add or remove accessor must have a body"); yyVal = null; } -void case_331() -#line 2741 "cs-parser.jay" +void case_335() +#line 2795 "cs-parser.jay" { current_type.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; report.Error (1519, GetLocation (yyVals[-1+yyTop]), "An attribute is missing member declaration"); lexer.putback ('}'); } -void case_332() -#line 2752 "cs-parser.jay" +void case_336() +#line 2806 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `}' in class, struct, or interface member declaration"); @@ -6403,15 +6622,15 @@ void case_332() yyVal = current_field; } -void case_333() -#line 2772 "cs-parser.jay" +void case_337() +#line 2826 "cs-parser.jay" { if (doc_support) enumTypeComment = Lexer.consume_doc_comment (); } -void case_334() -#line 2777 "cs-parser.jay" +void case_338() +#line 2831 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; @@ -6429,8 +6648,8 @@ void case_334() } } -void case_335() -#line 2794 "cs-parser.jay" +void case_339() +#line 2848 "cs-parser.jay" { lexer.parsing_modifiers = true; @@ -6439,8 +6658,8 @@ void case_335() Lexer.doc_state = XmlCommentState.Allowed; } -void case_336() -#line 2802 "cs-parser.jay" +void case_340() +#line 2856 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[-1+yyTop])); if (yyVals[0+yyTop] != null) { @@ -6457,29 +6676,29 @@ void case_336() yyVal = pop_current_class (); } -void case_338() -#line 2822 "cs-parser.jay" +void case_342() +#line 2876 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); yyVal = yyVals[0+yyTop]; } -void case_339() -#line 2827 "cs-parser.jay" +void case_343() +#line 2881 "cs-parser.jay" { Error_TypeExpected (GetLocation (yyVals[-1+yyTop])); yyVal = null; } -void case_344() -#line 2845 "cs-parser.jay" +void case_348() +#line 2899 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } -void case_345() -#line 2853 "cs-parser.jay" +void case_349() +#line 2907 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-1+yyTop]); @@ -6493,8 +6712,8 @@ void case_345() yyVal = em; } -void case_346() -#line 2866 "cs-parser.jay" +void case_350() +#line 2920 "cs-parser.jay" { ++lexer.parsing_block; if (doc_support) { @@ -6503,8 +6722,8 @@ void case_346() } } -void case_347() -#line 2874 "cs-parser.jay" +void case_351() +#line 2928 "cs-parser.jay" { --lexer.parsing_block; @@ -6519,8 +6738,8 @@ void case_347() yyVal = em; } -void case_348() -#line 2888 "cs-parser.jay" +void case_352() +#line 2942 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6536,8 +6755,8 @@ void case_348() yyVal = em; } -void case_351() -#line 2915 "cs-parser.jay" +void case_355() +#line 2969 "cs-parser.jay" { valid_param_mod = 0; @@ -6553,8 +6772,8 @@ void case_351() lexer.ConstraintsParsing = true; } -void case_353() -#line 2934 "cs-parser.jay" +void case_357() +#line 2988 "cs-parser.jay" { if (doc_support) { current_delegate.DocComment = Lexer.consume_doc_comment (); @@ -6570,8 +6789,8 @@ void case_353() current_delegate = null; } -void case_355() -#line 2953 "cs-parser.jay" +void case_359() +#line 3007 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); @@ -6579,8 +6798,8 @@ void case_355() yyVal = ComposedTypeSpecifier.CreateNullable (GetLocation (yyVals[0+yyTop])); } -void case_357() -#line 2964 "cs-parser.jay" +void case_361() +#line 3018 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -6589,73 +6808,68 @@ void case_357() lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } -void case_358() -#line 2972 "cs-parser.jay" +void case_362() +#line 3026 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; - var qam = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location); - lbag.AddLocation (qam.TypeArguments, Lexer.GenericDimensionLocations); - yyVal = qam; + + yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_360() -#line 2985 "cs-parser.jay" +void case_364() +#line 3038 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_361() -#line 2991 "cs-parser.jay" +void case_365() +#line 3044 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; - var ma = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); - lbag.AddLocation (ma.TypeArguments, Lexer.GenericDimensionLocations); - yyVal = ma; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_362() -#line 3002 "cs-parser.jay" +void case_366() +#line 3053 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } -void case_363() -#line 3007 "cs-parser.jay" +void case_367() +#line 3058 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; - var sn = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location); - lbag.AddLocation (sn.TypeArguments, Lexer.GenericDimensionLocations); - yyVal = sn; + yyVal = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location); } -void case_365() -#line 3021 "cs-parser.jay" +void case_369() +#line 3070 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); var list = locationListStack.Pop (); list.Add (GetLocation (yyVals[-2+yyTop])); - list.Add (GetLocation (yyVals[-1+yyTop])); + list.Add (GetLocation (yyVals[0+yyTop])); lbag.AddLocation (yyVals[-1+yyTop], list); yyVal = yyVals[-1+yyTop];; } -void case_366() -#line 3032 "cs-parser.jay" +void case_370() +#line 3081 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } -void case_367() -#line 3040 "cs-parser.jay" +void case_371() +#line 3089 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6663,8 +6877,8 @@ void case_367() locationListStack.Push (new List<Location> ()); } -void case_368() -#line 3047 "cs-parser.jay" +void case_372() +#line 3096 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6672,16 +6886,16 @@ void case_368() locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); } -void case_370() -#line 3064 "cs-parser.jay" +void case_374() +#line 3113 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt.Value, (TypeParameters)yyVals[0+yyTop], lt.Location); } -void case_371() -#line 3073 "cs-parser.jay" +void case_375() +#line 3122 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; if (mn.TypeParameters != null) @@ -6689,38 +6903,38 @@ void case_371() mn.GetSignatureForError ())); } -void case_373() -#line 3084 "cs-parser.jay" +void case_377() +#line 3133 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName (lt.Value, (TypeParameters) yyVals[0+yyTop], (ATypeNameExpression) yyVals[-2+yyTop], lt.Location); } -void case_374() -#line 3093 "cs-parser.jay" +void case_378() +#line 3142 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } -void case_375() -#line 3098 "cs-parser.jay" +void case_379() +#line 3147 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, null, (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } -void case_376() -#line 3106 "cs-parser.jay" +void case_380() +#line 3155 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_377() -#line 3112 "cs-parser.jay" +void case_381() +#line 3161 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-3+yyTop]; var lt2 = (LocatedToken) yyVals[-2+yyTop]; @@ -6729,16 +6943,16 @@ void case_377() lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[0+yyTop])); } -void case_378() -#line 3120 "cs-parser.jay" +void case_382() +#line 3169 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberAccess ((ATypeNameExpression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_380() -#line 3130 "cs-parser.jay" +void case_384() +#line 3179 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -6750,8 +6964,8 @@ void case_380() lbag.AddLocation (yyVals[-1+yyTop], list); } -void case_381() -#line 3144 "cs-parser.jay" +void case_385() +#line 3193 "cs-parser.jay" { var tparams = new TypeParameters (); tparams.Add ((TypeParameter)yyVals[0+yyTop]); @@ -6759,8 +6973,8 @@ void case_381() locationListStack.Push (new List<Location> ()); } -void case_382() -#line 3151 "cs-parser.jay" +void case_386() +#line 3200 "cs-parser.jay" { var tparams = (TypeParameters) yyVals[-2+yyTop]; tparams.Add ((TypeParameter)yyVals[0+yyTop]); @@ -6768,8 +6982,8 @@ void case_382() locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); } -void case_383() -#line 3161 "cs-parser.jay" +void case_387() +#line 3210 "cs-parser.jay" { var lt = (LocatedToken)yyVals[0+yyTop]; var variance = (VarianceDecl) yyVals[-1+yyTop]; @@ -6778,8 +6992,8 @@ void case_383() lbag.AddLocation (yyVal, savedLocation); } -void case_384() -#line 3169 "cs-parser.jay" +void case_388() +#line 3218 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); @@ -6789,15 +7003,15 @@ void case_384() yyVal = new TypeParameter (MemberName.Null, null, null); } -void case_393() -#line 3213 "cs-parser.jay" +void case_397() +#line 3262 "cs-parser.jay" { report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_396() -#line 3229 "cs-parser.jay" +void case_400() +#line 3278 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); @@ -6810,30 +7024,30 @@ void case_396() } } -void case_399() -#line 3249 "cs-parser.jay" +void case_403() +#line 3298 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_400() -#line 3257 "cs-parser.jay" +void case_404() +#line 3306 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_403() -#line 3273 "cs-parser.jay" +void case_407() +#line 3322 "cs-parser.jay" { var types = new List<FullNamedExpression> (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = types; } -void case_404() -#line 3279 "cs-parser.jay" +void case_408() +#line 3328 "cs-parser.jay" { var types = (List<FullNamedExpression>) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6841,8 +7055,8 @@ void case_404() yyVal = types; } -void case_405() -#line 3289 "cs-parser.jay" +void case_409() +#line 3338 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) { report.Error (1521, GetLocation (yyVals[0+yyTop]), "Invalid base type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -6850,40 +7064,84 @@ void case_405() yyVal = yyVals[0+yyTop]; } -void case_443() -#line 3353 "cs-parser.jay" +void case_448() +#line 3403 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } -void case_454() -#line 3394 "cs-parser.jay" +void case_457() +#line 3434 "cs-parser.jay" +{ + var list = new List<Expression> (); + list.Add ((InterpolatedStringInsert) yyVals[0+yyTop]); + yyVal = list; + } + +void case_458() +#line 3440 "cs-parser.jay" +{ + var list = (List<Expression>) yyVals[-2+yyTop]; + list.Add ((StringLiteral) yyVals[-1+yyTop]); + list.Add ((InterpolatedStringInsert) yyVals[0+yyTop]); + yyVal = list; + } + +void case_460() +#line 3454 "cs-parser.jay" +{ + yyVal = new InterpolatedStringInsert ((Expression) yyVals[-2+yyTop]) { + Alignment = (Expression)yyVals[0+yyTop] + }; + } + +void case_462() +#line 3464 "cs-parser.jay" +{ + lexer.parsing_interpolation_format = false; + + yyVal = new InterpolatedStringInsert ((Expression) yyVals[-3+yyTop]) { + Format = (string)yyVals[0+yyTop] + }; + } + +void case_464() +#line 3476 "cs-parser.jay" +{ + lexer.parsing_interpolation_format = false; + + yyVal = new InterpolatedStringInsert ((Expression) yyVals[-5+yyTop]) { + Alignment = (Expression)yyVals[-3+yyTop], + Format = (string) yyVals[0+yyTop] + }; + } + +void case_469() +#line 3509 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_456() -#line 3406 "cs-parser.jay" +void case_471() +#line 3521 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_457() -#line 3412 "cs-parser.jay" +void case_472() +#line 3527 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; - var ma = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); - lbag.AddLocation (ma.TypeArguments, Lexer.GenericDimensionLocations); - yyVal = ma; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_458() -#line 3420 "cs-parser.jay" +void case_473() +#line 3533 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); @@ -6893,32 +7151,32 @@ void case_458() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_459() -#line 3429 "cs-parser.jay" +void case_474() +#line 3542 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_460() -#line 3435 "cs-parser.jay" +void case_475() +#line 3548 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_461() -#line 3441 "cs-parser.jay" +void case_476() +#line 3554 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new SimpleName ("await", ((LocatedToken) yyVals[-3+yyTop]).Location), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_462() -#line 3447 "cs-parser.jay" +void case_477() +#line 3560 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -6927,40 +7185,39 @@ void case_462() lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } -void case_463() -#line 3455 "cs-parser.jay" +void case_478() +#line 3568 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; - var qam = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location); - lbag.AddLocation (qam.TypeArguments, Lexer.GenericDimensionLocations); - yyVal = qam; + + yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_465() -#line 3466 "cs-parser.jay" +void case_480() +#line 3578 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_467() -#line 3474 "cs-parser.jay" +void case_482() +#line 3586 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_468() -#line 3482 "cs-parser.jay" +void case_483() +#line 3594 "cs-parser.jay" { yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_469() -#line 3487 "cs-parser.jay" +void case_484() +#line 3599 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6968,8 +7225,8 @@ void case_469() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_470() -#line 3494 "cs-parser.jay" +void case_485() +#line 3606 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6977,8 +7234,8 @@ void case_470() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_473() -#line 3509 "cs-parser.jay" +void case_488() +#line 3621 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = new CollectionOrObjectInitializers (GetLocation (yyVals[-2+yyTop])); @@ -6988,23 +7245,23 @@ void case_473() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_474() -#line 3518 "cs-parser.jay" +void case_489() +#line 3630 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_477() -#line 3534 "cs-parser.jay" +void case_492() +#line 3646 "cs-parser.jay" { var a = new List<Expression> (); a.Add ((Expression) yyVals[0+yyTop]); yyVal = a; } -void case_478() -#line 3540 "cs-parser.jay" +void case_493() +#line 3652 "cs-parser.jay" { var a = (List<Expression>)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); @@ -7012,31 +7269,31 @@ void case_478() yyVal = a; } -void case_479() -#line 3546 "cs-parser.jay" +void case_494() +#line 3658 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_480() -#line 3554 "cs-parser.jay" +void case_495() +#line 3666 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_481() -#line 3560 "cs-parser.jay" +void case_496() +#line 3672 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-2+yyTop]); yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_483() -#line 3569 "cs-parser.jay" +void case_498() +#line 3681 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -7045,8 +7302,8 @@ void case_483() yyVal = new CompletionElementInitializer (csn.Prefix, csn.Location); } -void case_484() -#line 3577 "cs-parser.jay" +void case_499() +#line 3689 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = new CollectionElementInitializer (GetLocation (yyVals[-2+yyTop])); @@ -7057,8 +7314,8 @@ void case_484() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_485() -#line 3587 "cs-parser.jay" +void case_500() +#line 3699 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) FeatureIsNotAvailable (GetLocation (yyVals[-4+yyTop]), "dictionary initializer"); @@ -7067,24 +7324,24 @@ void case_485() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_486() -#line 3595 "cs-parser.jay" +void case_501() +#line 3707 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = new CollectionElementInitializer (GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_491() -#line 3614 "cs-parser.jay" +void case_506() +#line 3726 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); yyVal = list; } -void case_492() -#line 3620 "cs-parser.jay" +void case_507() +#line 3732 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) @@ -7095,8 +7352,8 @@ void case_492() yyVal = list; } -void case_493() -#line 3630 "cs-parser.jay" +void case_508() +#line 3742 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -7112,8 +7369,8 @@ void case_493() yyVal = list; } -void case_494() -#line 3645 "cs-parser.jay" +void case_509() +#line 3757 "cs-parser.jay" { if (lexer.putback_char == -1) lexer.putback (')'); /* TODO: Wrong but what can I do*/ @@ -7121,50 +7378,83 @@ void case_494() yyVal = yyVals[-2+yyTop]; } -void case_495() -#line 3652 "cs-parser.jay" +void case_510() +#line 3764 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } -void case_500() -#line 3673 "cs-parser.jay" +void case_515() +#line 3785 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_501() -#line 3678 "cs-parser.jay" +void case_517() +#line 3794 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_502() -#line 3683 "cs-parser.jay" +void case_519() +#line 3803 "cs-parser.jay" { yyVal = new Argument (new Arglist ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_503() -#line 3688 "cs-parser.jay" +void case_520() +#line 3808 "cs-parser.jay" { yyVal = new Argument (new Arglist (GetLocation (yyVals[-2+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_505() -#line 3700 "cs-parser.jay" +void case_521() +#line 3816 "cs-parser.jay" +{ + yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_522() +#line 3833 "cs-parser.jay" +{ + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "declaration expression"); + + var lt = (LocatedToken) yyVals[0+yyTop]; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + yyVal = new DeclarationExpression ((FullNamedExpression) yyVals[-1+yyTop], lv); + } + +void case_523() +#line 3843 "cs-parser.jay" +{ + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "declaration expression"); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + yyVal = new DeclarationExpression ((FullNamedExpression) yyVals[-3+yyTop], lv) { + Initializer = (Expression) yyVals[0+yyTop] + }; + } + +void case_525() +#line 3862 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_506() -#line 3705 "cs-parser.jay" +void case_526() +#line 3867 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); @@ -7176,30 +7466,30 @@ void case_506() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_507() -#line 3716 "cs-parser.jay" +void case_527() +#line 3878 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_508() -#line 3721 "cs-parser.jay" +void case_528() +#line 3883 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_509() -#line 3729 "cs-parser.jay" +void case_529() +#line 3891 "cs-parser.jay" { var list = new List<Expression> (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_510() -#line 3735 "cs-parser.jay" +void case_530() +#line 3897 "cs-parser.jay" { var list = (List<Expression>) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -7207,16 +7497,16 @@ void case_510() yyVal = list; } -void case_511() -#line 3745 "cs-parser.jay" +void case_531() +#line 3907 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); yyVal = args; } -void case_512() -#line 3751 "cs-parser.jay" +void case_532() +#line 3913 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -7227,22 +7517,22 @@ void case_512() yyVal = args; } -void case_516() -#line 3779 "cs-parser.jay" +void case_536() +#line 3941 "cs-parser.jay" { yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_517() -#line 3784 "cs-parser.jay" +void case_537() +#line 3946 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } -void case_520() -#line 3806 "cs-parser.jay" +void case_540() +#line 3968 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -7256,8 +7546,8 @@ void case_520() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_521() -#line 3819 "cs-parser.jay" +void case_541() +#line 3981 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -7265,8 +7555,8 @@ void case_521() yyVal = new NewInitialize ((FullNamedExpression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_522() -#line 3831 "cs-parser.jay" +void case_542() +#line 3993 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List<Expression>) yyVals[-3+yyTop], new ComposedTypeSpecifier (((List<Expression>) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) { @@ -7275,8 +7565,8 @@ void case_522() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_523() -#line 3839 "cs-parser.jay" +void case_543() +#line 4001 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -7284,8 +7574,8 @@ void case_523() yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-2+yyTop], (ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } -void case_524() -#line 3846 "cs-parser.jay" +void case_544() +#line 4008 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -7293,30 +7583,30 @@ void case_524() yyVal = new ImplicitlyTypedArrayCreation ((ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_525() -#line 3853 "cs-parser.jay" +void case_545() +#line 4015 "cs-parser.jay" { report.Error (178, GetLocation (yyVals[-1+yyTop]), "Invalid rank specifier, expecting `,' or `]'"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], null, GetLocation (yyVals[-6+yyTop])); } -void case_526() -#line 3858 "cs-parser.jay" +void case_546() +#line 4020 "cs-parser.jay" { Error_SyntaxError (yyToken); /* It can be any of new expression, create the most common one*/ yyVal = new New ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_528() -#line 3870 "cs-parser.jay" +void case_548() +#line 4032 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } -void case_529() -#line 3878 "cs-parser.jay" +void case_549() +#line 4040 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -7327,16 +7617,16 @@ void case_529() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_535() -#line 3905 "cs-parser.jay" +void case_555() +#line 4067 "cs-parser.jay" { var a = new List<AnonymousTypeParameter> (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); yyVal = a; } -void case_536() -#line 3911 "cs-parser.jay" +void case_556() +#line 4073 "cs-parser.jay" { var a = (List<AnonymousTypeParameter>) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -7345,60 +7635,60 @@ void case_536() yyVal = a; } -void case_539() -#line 3930 "cs-parser.jay" +void case_559() +#line 4092 "cs-parser.jay" { var lt = (LocatedToken)yyVals[-2+yyTop]; yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_540() -#line 3936 "cs-parser.jay" +void case_560() +#line 4098 "cs-parser.jay" { var lt = (LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), lt.Value, lt.Location); } -void case_541() -#line 3942 "cs-parser.jay" +void case_561() +#line 4104 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } -void case_542() -#line 3947 "cs-parser.jay" +void case_562() +#line 4109 "cs-parser.jay" { report.Error (746, lexer.Location, "Invalid anonymous type member declarator. Anonymous type members must be a member assignment, simple name or member access expression"); yyVal = null; } -void case_546() -#line 3962 "cs-parser.jay" +void case_566() +#line 4124 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_547() -#line 3970 "cs-parser.jay" +void case_567() +#line 4132 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_548() -#line 3975 "cs-parser.jay" +void case_568() +#line 4137 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_553() -#line 4005 "cs-parser.jay" +void case_573() +#line 4167 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -7406,8 +7696,8 @@ void case_553() yyVal = ai; } -void case_554() -#line 4012 "cs-parser.jay" +void case_574() +#line 4174 "cs-parser.jay" { var ai = new ArrayInitializer ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -7419,16 +7709,16 @@ void case_554() yyVal = ai; } -void case_555() -#line 4026 "cs-parser.jay" +void case_575() +#line 4188 "cs-parser.jay" { var list = new List<Expression> (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_556() -#line 4032 "cs-parser.jay" +void case_576() +#line 4194 "cs-parser.jay" { var list = (List<Expression>) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -7436,22 +7726,22 @@ void case_556() yyVal = list; } -void case_557() -#line 4042 "cs-parser.jay" +void case_577() +#line 4204 "cs-parser.jay" { yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_559() -#line 4051 "cs-parser.jay" +void case_579() +#line 4213 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } -void case_560() -#line 4059 "cs-parser.jay" +void case_580() +#line 4221 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -7459,8 +7749,8 @@ void case_560() yyVal = yyVals[0+yyTop]; } -void case_561() -#line 4069 "cs-parser.jay" +void case_581() +#line 4231 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) @@ -7469,15 +7759,15 @@ void case_561() yyVal = lt; } -void case_562() -#line 4080 "cs-parser.jay" +void case_582() +#line 4242 "cs-parser.jay" { yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_563() -#line 4085 "cs-parser.jay" +void case_583() +#line 4247 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7485,45 +7775,45 @@ void case_563() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_564() -#line 4095 "cs-parser.jay" +void case_584() +#line 4257 "cs-parser.jay" { yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_565() -#line 4100 "cs-parser.jay" +void case_585() +#line 4262 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new CheckedExpr (null, GetLocation (yyVals[-1+yyTop])); } -void case_566() -#line 4109 "cs-parser.jay" +void case_586() +#line 4271 "cs-parser.jay" { yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_567() -#line 4114 "cs-parser.jay" +void case_587() +#line 4276 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnCheckedExpr (null, GetLocation (yyVals[-1+yyTop])); } -void case_568() -#line 4123 "cs-parser.jay" +void case_588() +#line 4285 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new Indirection ((Expression) yyVals[-3+yyTop], GetLocation (yyVals[-2+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } -void case_570() -#line 4135 "cs-parser.jay" +void case_590() +#line 4297 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { @@ -7533,8 +7823,8 @@ void case_570() } } -void case_572() -#line 4148 "cs-parser.jay" +void case_592() +#line 4310 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); @@ -7545,8 +7835,8 @@ void case_572() } } -void case_576() -#line 4173 "cs-parser.jay" +void case_596() +#line 4335 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; @@ -7554,8 +7844,8 @@ void case_576() PushLocation (GetLocation (yyVals[-3+yyTop])); } -void case_577() -#line 4183 "cs-parser.jay" +void case_597() +#line 4345 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -7564,15 +7854,15 @@ void case_577() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_581() -#line 4203 "cs-parser.jay" +void case_601() +#line 4365 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_582() -#line 4208 "cs-parser.jay" +void case_602() +#line 4370 "cs-parser.jay" { if (!async_block) { if (current_anonymous_method is LambdaExpression) { @@ -7595,24 +7885,24 @@ void case_582() yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_583() -#line 4230 "cs-parser.jay" +void case_603() +#line 4392 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.LogicalNot, null, GetLocation (yyVals[-1+yyTop])); } -void case_584() -#line 4236 "cs-parser.jay" +void case_604() +#line 4398 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.OnesComplement, null, GetLocation (yyVals[-1+yyTop])); } -void case_585() -#line 4242 "cs-parser.jay" +void case_605() +#line 4404 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7620,85 +7910,85 @@ void case_585() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_586() -#line 4249 "cs-parser.jay" +void case_606() +#line 4411 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Await (null, GetLocation (yyVals[-1+yyTop])); } -void case_594() -#line 4287 "cs-parser.jay" +void case_614() +#line 4449 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.UnaryPlus, null, GetLocation (yyVals[-1+yyTop])); } -void case_595() -#line 4293 "cs-parser.jay" +void case_615() +#line 4455 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.UnaryNegation, null, GetLocation (yyVals[-1+yyTop])); } -void case_596() -#line 4299 "cs-parser.jay" +void case_616() +#line 4461 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, null, GetLocation (yyVals[-1+yyTop])); } -void case_597() -#line 4305 "cs-parser.jay" +void case_617() +#line 4467 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, null, GetLocation (yyVals[-1+yyTop])); } -void case_598() -#line 4311 "cs-parser.jay" +void case_618() +#line 4473 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Indirection (null, GetLocation (yyVals[-1+yyTop])); } -void case_599() -#line 4317 "cs-parser.jay" +void case_619() +#line 4479 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.AddressOf, null, GetLocation (yyVals[-1+yyTop])); } -void case_601() -#line 4327 "cs-parser.jay" +void case_621() +#line 4489 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_602() -#line 4332 "cs-parser.jay" +void case_622() +#line 4494 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_603() -#line 4337 "cs-parser.jay" +void case_623() +#line 4499 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_604() -#line 4342 "cs-parser.jay" +void case_624() +#line 4504 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7706,8 +7996,8 @@ void case_604() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_605() -#line 4349 "cs-parser.jay" +void case_625() +#line 4511 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7715,8 +8005,8 @@ void case_605() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_606() -#line 4356 "cs-parser.jay" +void case_626() +#line 4518 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7724,22 +8014,22 @@ void case_606() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_608() -#line 4367 "cs-parser.jay" +void case_628() +#line 4529 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_609() -#line 4372 "cs-parser.jay" +void case_629() +#line 4534 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_610() -#line 4377 "cs-parser.jay" +void case_630() +#line 4539 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7747,8 +8037,8 @@ void case_610() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_611() -#line 4384 "cs-parser.jay" +void case_631() +#line 4546 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7756,8 +8046,8 @@ void case_611() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_613() -#line 4395 "cs-parser.jay" +void case_633() +#line 4557 "cs-parser.jay" { var is_expr = new Is ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); if (yyVals[0+yyTop] != null) { @@ -7772,92 +8062,128 @@ void case_613() yyVal = is_expr; } -void case_614() -#line 4409 "cs-parser.jay" +void case_634() +#line 4571 "cs-parser.jay" +{ + var is_expr = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "pattern matching"); + + yyVal = is_expr; + } + +void case_635() +#line 4579 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new As ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_615() -#line 4415 "cs-parser.jay" +void case_636() +#line 4585 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Is ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_616() -#line 4421 "cs-parser.jay" +void case_637() +#line 4591 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new Is (new SimpleName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_617() -#line 4426 "cs-parser.jay" +void case_638() +#line 4596 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new As (new SimpleName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_619() -#line 4435 "cs-parser.jay" +void case_645() +#line 4619 "cs-parser.jay" { - if (yyVals[-1+yyTop] is VarExpr) - yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); + yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } - yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); +void case_651() +#line 4647 "cs-parser.jay" +{ + var list = new List<PropertyPatternMember> (); + list.Add ((PropertyPatternMember) yyVals[0+yyTop]); + yyVal = list; } -void case_623() -#line 4454 "cs-parser.jay" +void case_652() +#line 4653 "cs-parser.jay" { - Expression expr = (Expression) yyVals[-1+yyTop]; - if (yyVals[0+yyTop] == null) { - SimpleName sn = expr as SimpleName; - if (sn != null && sn.Name == "var") - yyVal = new VarExpr (sn.Location); - else - yyVal = yyVals[-1+yyTop]; - } else if (expr is ATypeNameExpression) { - yyVal = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); - } else { - Error_ExpectingTypeName (expr); - yyVal = null; - } + var list = (List<PropertyPatternMember>) yyVals[-2+yyTop]; + list.Add ((PropertyPatternMember) yyVals[0+yyTop]); + yyVal = list; } -void case_624() -#line 4470 "cs-parser.jay" +void case_653() +#line 4662 "cs-parser.jay" { - ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new PropertyPatternMember (lt.Value, (Expression) yyVals[0+yyTop], lt.Location); + } - if (expr != null) { - yyVal = new ComposedCast (expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); - } else { - Error_ExpectingTypeName ((Expression)yyVals[-1+yyTop]); - yyVal = expr; +void case_655() +#line 4671 "cs-parser.jay" +{ + if (yyVals[0+yyTop] != null) { + var lt = (LocatedToken) yyVals[0+yyTop]; + var variable = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (variable); } } -void case_628() -#line 4487 "cs-parser.jay" +void case_658() +#line 4690 "cs-parser.jay" +{ + Arguments args = new Arguments (4); + args.Add ((Argument) yyVals[0+yyTop]); + yyVal = args; + } + +void case_659() +#line 4696 "cs-parser.jay" +{ + Arguments args = (Arguments) yyVals[-2+yyTop]; + if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) yyVals[0+yyTop]); + yyVal = args; + } + +void case_661() +#line 4712 "cs-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new NamedArgument (lt.Value, lt.Location, (Expression) yyVals[0+yyTop]); + } + +void case_663() +#line 4721 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_629() -#line 4492 "cs-parser.jay" +void case_664() +#line 4726 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_630() -#line 4497 "cs-parser.jay" +void case_665() +#line 4731 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7865,8 +8191,8 @@ void case_630() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_631() -#line 4504 "cs-parser.jay" +void case_666() +#line 4738 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7874,36 +8200,36 @@ void case_631() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_633() -#line 4515 "cs-parser.jay" +void case_668() +#line 4749 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_634() -#line 4520 "cs-parser.jay" +void case_669() +#line 4754 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_635() -#line 4525 "cs-parser.jay" +void case_670() +#line 4759 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_636() -#line 4530 "cs-parser.jay" +void case_671() +#line 4764 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_637() -#line 4535 "cs-parser.jay" +void case_672() +#line 4769 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7911,8 +8237,8 @@ void case_637() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_638() -#line 4542 "cs-parser.jay" +void case_673() +#line 4776 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7920,8 +8246,8 @@ void case_638() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_639() -#line 4549 "cs-parser.jay" +void case_674() +#line 4783 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7929,8 +8255,8 @@ void case_639() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_640() -#line 4556 "cs-parser.jay" +void case_675() +#line 4790 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7938,22 +8264,22 @@ void case_640() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_642() -#line 4567 "cs-parser.jay" +void case_677() +#line 4801 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_643() -#line 4572 "cs-parser.jay" +void case_678() +#line 4806 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_644() -#line 4577 "cs-parser.jay" +void case_679() +#line 4811 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7961,8 +8287,8 @@ void case_644() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_645() -#line 4584 "cs-parser.jay" +void case_680() +#line 4818 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7970,15 +8296,15 @@ void case_645() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_647() -#line 4595 "cs-parser.jay" +void case_682() +#line 4829 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_648() -#line 4600 "cs-parser.jay" +void case_683() +#line 4834 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7986,15 +8312,15 @@ void case_648() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_650() -#line 4611 "cs-parser.jay" +void case_685() +#line 4845 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_651() -#line 4616 "cs-parser.jay" +void case_686() +#line 4850 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8002,15 +8328,15 @@ void case_651() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_653() -#line 4627 "cs-parser.jay" +void case_688() +#line 4861 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_654() -#line 4632 "cs-parser.jay" +void case_689() +#line 4866 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8018,15 +8344,15 @@ void case_654() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_656() -#line 4643 "cs-parser.jay" +void case_691() +#line 4877 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_657() -#line 4648 "cs-parser.jay" +void case_692() +#line 4882 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8034,15 +8360,15 @@ void case_657() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_659() -#line 4659 "cs-parser.jay" +void case_694() +#line 4893 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_660() -#line 4664 "cs-parser.jay" +void case_695() +#line 4898 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8050,8 +8376,8 @@ void case_660() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_662() -#line 4675 "cs-parser.jay" +void case_697() +#line 4909 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); @@ -8060,23 +8386,23 @@ void case_662() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_664() -#line 4687 "cs-parser.jay" +void case_699() +#line 4921 "cs-parser.jay" { yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_665() -#line 4692 "cs-parser.jay" +void case_700() +#line 4926 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-3+yyTop]), (Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_666() -#line 4698 "cs-parser.jay" +void case_701() +#line 4932 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8084,8 +8410,8 @@ void case_666() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_667() -#line 4705 "cs-parser.jay" +void case_702() +#line 4939 "cs-parser.jay" { Error_SyntaxError (Token.CLOSE_BRACE); @@ -8094,85 +8420,85 @@ void case_667() lexer.putback ('}'); } -void case_668() -#line 4716 "cs-parser.jay" +void case_703() +#line 4950 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_669() -#line 4721 "cs-parser.jay" +void case_704() +#line 4955 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_670() -#line 4726 "cs-parser.jay" +void case_705() +#line 4960 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_671() -#line 4731 "cs-parser.jay" +void case_706() +#line 4965 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_672() -#line 4736 "cs-parser.jay" +void case_707() +#line 4970 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_673() -#line 4741 "cs-parser.jay" +void case_708() +#line 4975 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_674() -#line 4746 "cs-parser.jay" +void case_709() +#line 4980 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_675() -#line 4751 "cs-parser.jay" +void case_710() +#line 4985 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_676() -#line 4756 "cs-parser.jay" +void case_711() +#line 4990 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_677() -#line 4761 "cs-parser.jay" +void case_712() +#line 4995 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_678() -#line 4766 "cs-parser.jay" +void case_713() +#line 5000 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_679() -#line 4774 "cs-parser.jay" +void case_714() +#line 5008 "cs-parser.jay" { var pars = new List<Parameter> (4); pars.Add ((Parameter) yyVals[0+yyTop]); @@ -8180,8 +8506,8 @@ void case_679() yyVal = pars; } -void case_680() -#line 4781 "cs-parser.jay" +void case_715() +#line 5015 "cs-parser.jay" { var pars = (List<Parameter>) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -8195,46 +8521,46 @@ void case_680() yyVal = pars; } -void case_681() -#line 4797 "cs-parser.jay" +void case_716() +#line 5031 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], null, lt.Location); } -void case_682() -#line 4803 "cs-parser.jay" +void case_717() +#line 5037 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, Parameter.Modifier.NONE, null, lt.Location); } -void case_683() -#line 4809 "cs-parser.jay" +void case_718() +#line 5043 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_684() -#line 4814 "cs-parser.jay" +void case_719() +#line 5048 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[0+yyTop]); yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_686() -#line 4822 "cs-parser.jay" +void case_721() +#line 5056 "cs-parser.jay" { var pars_list = (List<Parameter>) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); lbag.AddLocation (yyVal, parameterListCommas); } -void case_688() -#line 4834 "cs-parser.jay" +void case_723() +#line 5068 "cs-parser.jay" { Block b = end_block (Location.Null); b.IsCompilerGenerated = true; @@ -8242,8 +8568,8 @@ void case_688() yyVal = b; } -void case_690() -#line 4842 "cs-parser.jay" +void case_725() +#line 5076 "cs-parser.jay" { /* Handles only cases like foo = x.FirstOrDefault (l => );*/ /* where we must restore current_variable*/ @@ -8254,128 +8580,128 @@ void case_690() yyVal = null; } -void case_692() -#line 4856 "cs-parser.jay" +void case_727() +#line 5090 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_693() -#line 4864 "cs-parser.jay" +void case_728() +#line 5098 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), false, lt.Location); } -void case_694() -#line 4870 "cs-parser.jay" +void case_729() +#line 5104 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_695() -#line 4875 "cs-parser.jay" +void case_730() +#line 5109 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-1+yyTop]); Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), false, lt.Location); } -void case_696() -#line 4881 "cs-parser.jay" +void case_731() +#line 5115 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_697() -#line 4886 "cs-parser.jay" +void case_732() +#line 5120 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), true, lt.Location); } -void case_698() -#line 4892 "cs-parser.jay" +void case_733() +#line 5126 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_700() -#line 4901 "cs-parser.jay" +void case_735() +#line 5135 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } -void case_701() -#line 4906 "cs-parser.jay" +void case_736() +#line 5140 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_703() -#line 4915 "cs-parser.jay" +void case_738() +#line 5149 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } -void case_704() -#line 4920 "cs-parser.jay" +void case_739() +#line 5154 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_711() -#line 4943 "cs-parser.jay" +void case_746() +#line 5177 "cs-parser.jay" { yyVal = new RefValueExpr ((Expression) yyVals[-3+yyTop], (FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_712() -#line 4948 "cs-parser.jay" +void case_747() +#line 5182 "cs-parser.jay" { yyVal = new RefTypeExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_713() -#line 4953 "cs-parser.jay" +void case_748() +#line 5187 "cs-parser.jay" { yyVal = new MakeRefExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_718() -#line 4980 "cs-parser.jay" +void case_753() +#line 5214 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; /* Cannot use opt_formal_parameter_list because it can be shared instance for empty parameters*/ lbag.AppendToMember (current_container, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); - if (lang_version < LanguageVersion.V_6) + if (lang_version != LanguageVersion.Experimental) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "primary constructor"); } -void case_723() -#line 5009 "cs-parser.jay" +void case_758() +#line 5243 "cs-parser.jay" { ++lexer.parsing_block; current_type.PrimaryConstructorBaseArgumentsStart = GetLocation (yyVals[0+yyTop]); } -void case_724() -#line 5014 "cs-parser.jay" +void case_759() +#line 5248 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); current_type.PrimaryConstructorBaseArguments = (Arguments) yyVals[-1+yyTop]; @@ -8384,8 +8710,8 @@ void case_724() yyVal = yyVals[-5+yyTop]; } -void case_726() -#line 5034 "cs-parser.jay" +void case_761() +#line 5268 "cs-parser.jay" { lexer.ConstraintsParsing = true; @@ -8399,8 +8725,8 @@ void case_726() valid_param_mod = ParameterModifierType.PrimaryConstructor; } -void case_727() -#line 5048 "cs-parser.jay" +void case_762() +#line 5282 "cs-parser.jay" { valid_param_mod = 0; lexer.ConstraintsParsing = false; @@ -8419,16 +8745,16 @@ void case_727() lexer.parsing_modifiers = true; } -void case_728() -#line 5066 "cs-parser.jay" +void case_763() +#line 5300 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_729() -#line 5072 "cs-parser.jay" +void case_764() +#line 5306 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -8438,16 +8764,16 @@ void case_729() yyVal = pop_current_class (); } -void case_732() -#line 5091 "cs-parser.jay" +void case_767() +#line 5325 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; lexer.parsing_modifiers = false; } -void case_735() -#line 5105 "cs-parser.jay" +void case_770() +#line 5339 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -8464,8 +8790,8 @@ void case_735() yyVal = m1 | m2; } -void case_736() -#line 5124 "cs-parser.jay" +void case_771() +#line 5358 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -8474,92 +8800,92 @@ void case_736() report.Error (1530, GetLocation (yyVals[0+yyTop]), "Keyword `new' is not allowed on namespace elements"); } -void case_737() -#line 5132 "cs-parser.jay" +void case_772() +#line 5366 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_738() -#line 5137 "cs-parser.jay" +void case_773() +#line 5371 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_739() -#line 5142 "cs-parser.jay" +void case_774() +#line 5376 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_740() -#line 5147 "cs-parser.jay" +void case_775() +#line 5381 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_741() -#line 5152 "cs-parser.jay" +void case_776() +#line 5386 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_742() -#line 5157 "cs-parser.jay" +void case_777() +#line 5391 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_743() -#line 5162 "cs-parser.jay" +void case_778() +#line 5396 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_744() -#line 5167 "cs-parser.jay" +void case_779() +#line 5401 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_745() -#line 5172 "cs-parser.jay" +void case_780() +#line 5406 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_746() -#line 5177 "cs-parser.jay" +void case_781() +#line 5411 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_747() -#line 5182 "cs-parser.jay" +void case_782() +#line 5416 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_748() -#line 5187 "cs-parser.jay" +void case_783() +#line 5421 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_749() -#line 5192 "cs-parser.jay" +void case_784() +#line 5426 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -8567,38 +8893,38 @@ void case_749() Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_750() -#line 5199 "cs-parser.jay" +void case_785() +#line 5433 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_753() -#line 5212 "cs-parser.jay" +void case_788() +#line 5446 "cs-parser.jay" { current_type.SetBaseTypes ((List<FullNamedExpression>) yyVals[0+yyTop]); lbag.AppendToMember (current_type, GetLocation (yyVals[-1+yyTop])); } -void case_754() -#line 5217 "cs-parser.jay" +void case_789() +#line 5451 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.SetBaseTypes ((List<FullNamedExpression>) yyVals[-1+yyTop]); } -void case_757() -#line 5234 "cs-parser.jay" +void case_792() +#line 5468 "cs-parser.jay" { var constraints = new List<Constraints> (1); constraints.Add ((Constraints) yyVals[0+yyTop]); yyVal = constraints; } -void case_758() -#line 5240 "cs-parser.jay" +void case_793() +#line 5474 "cs-parser.jay" { var constraints = (List<Constraints>) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -8615,16 +8941,16 @@ void case_758() yyVal = constraints; } -void case_759() -#line 5259 "cs-parser.jay" +void case_794() +#line 5493 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List<FullNamedExpression>) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_760() -#line 5265 "cs-parser.jay" +void case_795() +#line 5499 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8632,16 +8958,16 @@ void case_760() yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), null, GetLocation (yyVals[-2+yyTop])); } -void case_761() -#line 5275 "cs-parser.jay" +void case_796() +#line 5509 "cs-parser.jay" { var constraints = new List<FullNamedExpression> (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = constraints; } -void case_762() -#line 5281 "cs-parser.jay" +void case_797() +#line 5515 "cs-parser.jay" { var constraints = (List<FullNamedExpression>) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -8666,8 +8992,8 @@ void case_762() yyVal = constraints; } -void case_763() -#line 5308 "cs-parser.jay" +void case_798() +#line 5542 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) report.Error (706, GetLocation (yyVals[0+yyTop]), "Invalid constraint type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -8675,15 +9001,15 @@ void case_763() yyVal = yyVals[0+yyTop]; } -void case_764() -#line 5315 "cs-parser.jay" +void case_799() +#line 5549 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_768() -#line 5335 "cs-parser.jay" +void case_803() +#line 5569 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -8691,79 +9017,79 @@ void case_768() yyVal = yyVals[0+yyTop]; } -void case_769() -#line 5345 "cs-parser.jay" +void case_804() +#line 5579 "cs-parser.jay" { yyVal = new VarianceDecl (Variance.Covariant, GetLocation (yyVals[0+yyTop])); savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_770() -#line 5350 "cs-parser.jay" +void case_805() +#line 5584 "cs-parser.jay" { yyVal = new VarianceDecl (Variance.Contravariant, GetLocation (yyVals[0+yyTop])); savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_771() -#line 5371 "cs-parser.jay" +void case_806() +#line 5605 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } -void case_773() -#line 5383 "cs-parser.jay" +void case_808() +#line 5617 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_774() -#line 5388 "cs-parser.jay" +void case_809() +#line 5622 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } -void case_775() -#line 5397 "cs-parser.jay" +void case_810() +#line 5631 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } -void case_776() -#line 5402 "cs-parser.jay" +void case_811() +#line 5636 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_777() -#line 5406 "cs-parser.jay" +void case_812() +#line 5640 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol '}', expected '{'"); lexer.putback ('}'); yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_778() -#line 5415 "cs-parser.jay" +void case_813() +#line 5649 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } -void case_779() -#line 5420 "cs-parser.jay" +void case_814() +#line 5654 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_787() -#line 5448 "cs-parser.jay" +void case_822() +#line 5682 "cs-parser.jay" { Error_SyntaxError (yyToken); var lt =(LocatedToken) yyVals[-1+yyTop]; @@ -8772,43 +9098,43 @@ void case_787() yyVal = null; } -void case_788() -#line 5457 "cs-parser.jay" +void case_823() +#line 5691 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_821() -#line 5521 "cs-parser.jay" +void case_856() +#line 5755 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_822() -#line 5526 "cs-parser.jay" +void case_857() +#line 5760 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_823() -#line 5531 "cs-parser.jay" +void case_858() +#line 5765 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_824() -#line 5539 "cs-parser.jay" +void case_859() +#line 5773 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } -void case_825() -#line 5547 "cs-parser.jay" +void case_860() +#line 5781 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -8817,8 +9143,8 @@ void case_825() current_block.AddStatement (labeled); } -void case_828() -#line 5560 "cs-parser.jay" +void case_863() +#line 5794 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -8826,8 +9152,8 @@ void case_828() yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_829() -#line 5576 "cs-parser.jay" +void case_864() +#line 5810 "cs-parser.jay" { /* Ok, the above "primary_expression" is there to get rid of*/ /* both reduce/reduce and shift/reduces in the grammar, it should*/ @@ -8843,43 +9169,33 @@ void case_829() /* SimpleName is when you have*/ /* Blah i;*/ - Expression expr = (Expression) yyVals[-1+yyTop]; + var expr = (ATypeNameExpression) yyVals[-1+yyTop]; if (yyVals[0+yyTop] == null) { - SimpleName sn = expr as SimpleName; - if (sn != null && sn.Name == "var") - yyVal = new VarExpr (sn.Location); + if (expr.Name == "var" && expr is SimpleName) + yyVal = new VarExpr (expr.Location); else yyVal = yyVals[-1+yyTop]; - } else if (expr is ATypeNameExpression) { - yyVal = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); } else { - Error_ExpectingTypeName (expr); - yyVal = null; + yyVal = new ComposedCast (expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); } } -void case_830() -#line 5606 "cs-parser.jay" +void case_865() +#line 5836 "cs-parser.jay" { - ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; - - if (expr != null) { - yyVal = new ComposedCast (expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); - } else { - Error_ExpectingTypeName ((Expression)yyVals[-1+yyTop]); - yyVal = expr; - } + var expr = (ATypeNameExpression) yyVals[-1+yyTop]; + yyVal = new ComposedCast (expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_834() -#line 5623 "cs-parser.jay" +void case_869() +#line 5847 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_838() -#line 5646 "cs-parser.jay" +void case_873() +#line 5870 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -8887,8 +9203,8 @@ void case_838() current_variable = new BlockVariable ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_839() -#line 5653 "cs-parser.jay" +void case_874() +#line 5877 "cs-parser.jay" { yyVal = current_variable; current_variable = null; @@ -8898,8 +9214,8 @@ void case_839() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_840() -#line 5662 "cs-parser.jay" +void case_875() +#line 5886 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -8907,8 +9223,8 @@ void case_840() current_variable = new BlockConstant ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_841() -#line 5669 "cs-parser.jay" +void case_876() +#line 5893 "cs-parser.jay" { if (current_variable.Initializer != null) { lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); @@ -8919,8 +9235,8 @@ void case_841() current_variable = null; } -void case_843() -#line 5682 "cs-parser.jay" +void case_878() +#line 5906 "cs-parser.jay" { /* Redundant, but wont regress*/ report.Error (1525, lexer.Location, "Unexpected symbol }"); @@ -8928,16 +9244,16 @@ void case_843() yyVal = yyVals[0+yyTop]; } -void case_845() -#line 5693 "cs-parser.jay" +void case_880() +#line 5917 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; PushLocation (GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_846() -#line 5699 "cs-parser.jay" +void case_881() +#line 5923 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -8947,8 +9263,8 @@ void case_846() } } -void case_850() -#line 5717 "cs-parser.jay" +void case_885() +#line 5941 "cs-parser.jay" { foreach (var d in current_variable.Declarators) { if (d.Initializer == null) @@ -8956,8 +9272,8 @@ void case_850() } } -void case_853() -#line 5732 "cs-parser.jay" +void case_888() +#line 5956 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -8967,8 +9283,8 @@ void case_853() lbag.AddLocation (d, GetLocation (yyVals[-1+yyTop])); } -void case_854() -#line 5741 "cs-parser.jay" +void case_889() +#line 5965 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -8978,15 +9294,15 @@ void case_854() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_856() -#line 5757 "cs-parser.jay" +void case_891() +#line 5981 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); current_variable.Initializer = (Expression) yyVals[0+yyTop]; } -void case_861() -#line 5775 "cs-parser.jay" +void case_896() +#line 5999 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -8996,37 +9312,37 @@ void case_861() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_863() -#line 5788 "cs-parser.jay" +void case_898() +#line 6012 "cs-parser.jay" { yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_864() -#line 5793 "cs-parser.jay" +void case_899() +#line 6017 "cs-parser.jay" { report.Error (1575, GetLocation (yyVals[-1+yyTop]), "A stackalloc expression requires [] after type"); yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_865() -#line 5801 "cs-parser.jay" +void case_900() +#line 6025 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_867() -#line 5807 "cs-parser.jay" +void case_902() +#line 6031 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; report.Error (1002, GetLocation (yyVals[0+yyTop]), "; expected"); lexer.putback ('}'); } -void case_870() -#line 5825 "cs-parser.jay" +void case_905() +#line 6049 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -9037,22 +9353,22 @@ void case_870() } } -void case_871() -#line 5838 "cs-parser.jay" +void case_906() +#line 6062 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; yyVal = new StatementExpression (new OptionalAssign (expr, lexer.Location)); } -void case_872() -#line 5843 "cs-parser.jay" +void case_907() +#line 6067 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_875() -#line 5857 "cs-parser.jay" +void case_910() +#line 6081 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9061,8 +9377,8 @@ void case_875() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_876() -#line 5866 "cs-parser.jay" +void case_911() +#line 6090 "cs-parser.jay" { yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); @@ -9073,8 +9389,8 @@ void case_876() Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_877() -#line 5876 "cs-parser.jay" +void case_912() +#line 6100 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9082,16 +9398,16 @@ void case_877() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_879() -#line 5890 "cs-parser.jay" +void case_914() +#line 6114 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_880() -#line 5896 "cs-parser.jay" +void case_915() +#line 6120 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9099,30 +9415,30 @@ void case_880() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_887() -#line 5927 "cs-parser.jay" +void case_922() +#line 6151 "cs-parser.jay" { var label = (SwitchLabel) yyVals[0+yyTop]; label.SectionStart = true; current_block.AddStatement (label); } -void case_889() -#line 5940 "cs-parser.jay" +void case_924() +#line 6164 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_890() -#line 5945 "cs-parser.jay" +void case_925() +#line 6169 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_896() -#line 5964 "cs-parser.jay" +void case_931() +#line 6200 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9131,8 +9447,8 @@ void case_896() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_897() -#line 5972 "cs-parser.jay" +void case_932() +#line 6208 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9140,22 +9456,22 @@ void case_897() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_898() -#line 5982 "cs-parser.jay" +void case_933() +#line 6218 "cs-parser.jay" { yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_899() -#line 5987 "cs-parser.jay" +void case_934() +#line 6223 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), Location.Null); } -void case_900() -#line 5992 "cs-parser.jay" +void case_935() +#line 6228 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9163,8 +9479,8 @@ void case_900() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_901() -#line 6002 "cs-parser.jay" +void case_936() +#line 6238 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; @@ -9174,8 +9490,8 @@ void case_901() yyVal = f; } -void case_903() -#line 6019 "cs-parser.jay" +void case_938() +#line 6255 "cs-parser.jay" { For f = (For) yyVals[-2+yyTop]; f.Initializer = (Statement) yyVals[-1+yyTop]; @@ -9183,8 +9499,8 @@ void case_903() yyVal = f; } -void case_905() -#line 6029 "cs-parser.jay" +void case_940() +#line 6265 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); For f = (For) yyVals[-2+yyTop]; @@ -9193,8 +9509,8 @@ void case_905() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_906() -#line 6040 "cs-parser.jay" +void case_941() +#line 6276 "cs-parser.jay" { For f = (For) yyVals[-2+yyTop]; f.Condition = (BooleanExpression) yyVals[-1+yyTop]; @@ -9202,8 +9518,8 @@ void case_906() yyVal = f; } -void case_908() -#line 6051 "cs-parser.jay" +void case_943() +#line 6287 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); For f = (For) yyVals[-2+yyTop]; @@ -9212,8 +9528,8 @@ void case_908() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_909() -#line 6063 "cs-parser.jay" +void case_944() +#line 6299 "cs-parser.jay" { For f = (For) yyVals[-3+yyTop]; f.Iterator = (Statement) yyVals[-2+yyTop]; @@ -9227,15 +9543,15 @@ void case_909() yyVal = end_block (GetLocation (yyVals[-1+yyTop])); } -void case_910() -#line 6076 "cs-parser.jay" +void case_945() +#line 6312 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = end_block (current_block.StartLocation); } -void case_913() -#line 6089 "cs-parser.jay" +void case_948() +#line 6325 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -9243,8 +9559,8 @@ void case_913() current_variable = new BlockVariable ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_914() -#line 6096 "cs-parser.jay" +void case_949() +#line 6332 "cs-parser.jay" { yyVal = current_variable; if (yyVals[-1+yyTop] != null) @@ -9253,8 +9569,8 @@ void case_914() current_variable = null; } -void case_922() -#line 6123 "cs-parser.jay" +void case_957() +#line 6359 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -9269,8 +9585,8 @@ void case_922() yyVal = sl; } -void case_923() -#line 6140 "cs-parser.jay" +void case_958() +#line 6376 "cs-parser.jay" { report.Error (230, GetLocation (yyVals[-3+yyTop]), "Type and identifier are both required in a foreach statement"); @@ -9284,8 +9600,8 @@ void case_923() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_924() -#line 6153 "cs-parser.jay" +void case_959() +#line 6389 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9303,8 +9619,8 @@ void case_924() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_925() -#line 6170 "cs-parser.jay" +void case_960() +#line 6406 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -9315,8 +9631,8 @@ void case_925() yyVal = li; } -void case_926() -#line 6180 "cs-parser.jay" +void case_961() +#line 6416 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9328,8 +9644,8 @@ void case_926() yyVal = f; } -void case_927() -#line 6191 "cs-parser.jay" +void case_962() +#line 6427 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); current_block.IsCompilerGenerated = true; @@ -9343,8 +9659,8 @@ void case_927() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_928() -#line 6204 "cs-parser.jay" +void case_963() +#line 6440 "cs-parser.jay" { Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, null, GetLocation (yyVals[-3+yyTop])); current_block.AddStatement (f); @@ -9353,93 +9669,93 @@ void case_928() yyVal = f; } -void case_935() -#line 6224 "cs-parser.jay" +void case_970() +#line 6460 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_936() -#line 6232 "cs-parser.jay" +void case_971() +#line 6468 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_937() -#line 6237 "cs-parser.jay" +void case_972() +#line 6473 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); } -void case_938() -#line 6245 "cs-parser.jay" +void case_973() +#line 6481 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_939() -#line 6251 "cs-parser.jay" +void case_974() +#line 6487 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_940() -#line 6256 "cs-parser.jay" +void case_975() +#line 6492 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_941() -#line 6264 "cs-parser.jay" +void case_976() +#line 6500 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_942() -#line 6269 "cs-parser.jay" +void case_977() +#line 6505 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_943() -#line 6274 "cs-parser.jay" +void case_978() +#line 6510 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Return (null, GetLocation (yyVals[-1+yyTop])); } -void case_944() -#line 6282 "cs-parser.jay" +void case_979() +#line 6518 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_945() -#line 6287 "cs-parser.jay" +void case_980() +#line 6523 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_946() -#line 6292 "cs-parser.jay" +void case_981() +#line 6528 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw (null, GetLocation (yyVals[-1+yyTop])); } -void case_947() -#line 6300 "cs-parser.jay" +void case_982() +#line 6536 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -9456,8 +9772,8 @@ void case_947() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_948() -#line 6316 "cs-parser.jay" +void case_983() +#line 6552 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9476,8 +9792,8 @@ void case_948() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_949() -#line 6334 "cs-parser.jay" +void case_984() +#line 6570 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -9492,29 +9808,29 @@ void case_949() lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_953() -#line 6360 "cs-parser.jay" +void case_988() +#line 6596 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_954() -#line 6365 "cs-parser.jay" +void case_989() +#line 6601 "cs-parser.jay" { yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List<Catch>) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_955() -#line 6370 "cs-parser.jay" +void case_990() +#line 6606 "cs-parser.jay" { Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); } -void case_956() -#line 6378 "cs-parser.jay" +void case_991() +#line 6614 "cs-parser.jay" { var l = new List<Catch> (2); @@ -9522,8 +9838,8 @@ void case_956() yyVal = l; } -void case_957() -#line 6385 "cs-parser.jay" +void case_992() +#line 6621 "cs-parser.jay" { var l = (List<Catch>) yyVals[-1+yyTop]; @@ -9537,16 +9853,16 @@ void case_957() yyVal = l; } -void case_960() -#line 6406 "cs-parser.jay" +void case_995() +#line 6642 "cs-parser.jay" { var c = new Catch ((ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); c.Filter = (CatchFilterExpression) yyVals[-1+yyTop]; yyVal = c; } -void case_961() -#line 6412 "cs-parser.jay" +void case_996() +#line 6648 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch ((ExplicitBlock) current_block, GetLocation (yyVals[-4+yyTop])); @@ -9560,17 +9876,18 @@ void case_961() lbag.AddLocation (c, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); yyVal = c; + lexer.parsing_catch_when = true; } -void case_962() -#line 6427 "cs-parser.jay" +void case_997() +#line 6664 "cs-parser.jay" { - ((Catch) yyVals[-2+yyTop]).Filter = (CatchFilterExpression) yyVals[-1+yyTop]; - yyVal = yyVals[-2+yyTop]; + ((Catch) yyVals[-1+yyTop]).Filter = (CatchFilterExpression) yyVals[0+yyTop]; + yyVal = yyVals[-1+yyTop]; } -void case_963() -#line 6432 "cs-parser.jay" +void case_998() +#line 6669 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -9582,50 +9899,33 @@ void case_963() yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop])); } -void case_964() -#line 6443 "cs-parser.jay" +void case_1000() +#line 6687 "cs-parser.jay" { + end_block (Location.Null); Error_SyntaxError (yyToken); - - /* Required otherwise missing block could not be detected because*/ - /* start_block is run early*/ - var c = new Catch (null, GetLocation (yyVals[-5+yyTop])); - c.TypeExpression = (FullNamedExpression) yyVals[-3+yyTop]; - - if (yyVals[-2+yyTop] != null) { - var lt = (LocatedToken) yyVals[-2+yyTop]; - c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); - } - - if (yyVals[-2+yyTop] != null) { - var lt = (LocatedToken) yyVals[-2+yyTop]; - c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); - } - - lbag.AddLocation (c, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop])); - - yyVal = c; + yyVal = null; } -void case_966() -#line 6470 "cs-parser.jay" +void case_1003() +#line 6703 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_5) - FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "exception filter"); + FeatureIsNotAvailable (GetLocation (yyVals[-4+yyTop]), "exception filter"); - yyVal = new CatchFilterExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); - lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = new CatchFilterExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_969() -#line 6495 "cs-parser.jay" +void case_1006() +#line 6728 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_971() -#line 6505 "cs-parser.jay" +void case_1008() +#line 6738 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9634,8 +9934,8 @@ void case_971() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_972() -#line 6513 "cs-parser.jay" +void case_1009() +#line 6746 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9643,8 +9943,8 @@ void case_972() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_973() -#line 6523 "cs-parser.jay" +void case_1010() +#line 6756 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -9655,15 +9955,15 @@ void case_973() current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_974() -#line 6533 "cs-parser.jay" +void case_1011() +#line 6766 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_975() -#line 6538 "cs-parser.jay" +void case_1012() +#line 6771 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9674,8 +9974,8 @@ void case_975() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_976() -#line 6551 "cs-parser.jay" +void case_1013() +#line 6784 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -9686,15 +9986,15 @@ void case_976() current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_977() -#line 6561 "cs-parser.jay" +void case_1014() +#line 6794 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_978() -#line 6566 "cs-parser.jay" +void case_1015() +#line 6799 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9705,8 +10005,8 @@ void case_978() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_979() -#line 6576 "cs-parser.jay" +void case_1016() +#line 6809 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9715,8 +10015,8 @@ void case_979() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_980() -#line 6584 "cs-parser.jay" +void case_1017() +#line 6817 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9724,23 +10024,23 @@ void case_980() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_982() -#line 6595 "cs-parser.jay" +void case_1019() +#line 6828 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); } -void case_984() -#line 6607 "cs-parser.jay" +void case_1021() +#line 6840 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AddLocation (current_variable, GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_985() -#line 6619 "cs-parser.jay" +void case_1022() +#line 6852 "cs-parser.jay" { lexer.query_parsing = false; @@ -9753,8 +10053,8 @@ void case_985() current_block = current_block.Parent; } -void case_986() -#line 6631 "cs-parser.jay" +void case_1023() +#line 6864 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -9765,8 +10065,8 @@ void case_986() current_block = current_block.Parent; } -void case_987() -#line 6642 "cs-parser.jay" +void case_1024() +#line 6875 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -9775,16 +10075,16 @@ void case_987() current_block = current_block.Parent; } -void case_988() -#line 6649 "cs-parser.jay" +void case_1025() +#line 6882 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } -void case_989() -#line 6658 "cs-parser.jay" +void case_1026() +#line 6891 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9795,8 +10095,8 @@ void case_989() yyVal = new Linq.QueryExpression (clause); } -void case_990() -#line 6668 "cs-parser.jay" +void case_1027() +#line 6901 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9809,8 +10109,8 @@ void case_990() yyVal = new Linq.QueryExpression (clause); } -void case_991() -#line 6683 "cs-parser.jay" +void case_1028() +#line 6916 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9821,8 +10121,8 @@ void case_991() yyVal = new Linq.QueryExpression (clause); } -void case_992() -#line 6693 "cs-parser.jay" +void case_1029() +#line 6926 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9835,8 +10135,8 @@ void case_992() yyVal = new Linq.QueryExpression (clause); } -void case_994() -#line 6712 "cs-parser.jay" +void case_1031() +#line 6945 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -9848,8 +10148,8 @@ void case_994() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_996() -#line 6727 "cs-parser.jay" +void case_1033() +#line 6960 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -9866,8 +10166,8 @@ void case_996() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_997() -#line 6746 "cs-parser.jay" +void case_1034() +#line 6979 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -9883,8 +10183,8 @@ void case_997() yyVal = head; } -void case_998() -#line 6761 "cs-parser.jay" +void case_1035() +#line 6994 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[0+yyTop]; @@ -9897,22 +10197,22 @@ void case_998() yyVal = head; } -void case_1000() -#line 6774 "cs-parser.jay" +void case_1037() +#line 7007 "cs-parser.jay" { report.Error (742, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `{0}'. A query body must end with select or group clause", GetSymbolName (yyToken)); yyVal = yyVals[-1+yyTop]; } -void case_1001() -#line 6779 "cs-parser.jay" +void case_1038() +#line 7012 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_1003() -#line 6791 "cs-parser.jay" +void case_1040() +#line 7024 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -9920,8 +10220,8 @@ void case_1003() current_block = current_block.Parent; } -void case_1004() -#line 6798 "cs-parser.jay" +void case_1041() +#line 7031 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack<Linq.QueryBlock> (); @@ -9930,8 +10230,8 @@ void case_1004() linq_clause_blocks.Push ((Linq.QueryBlock)current_block); } -void case_1005() -#line 6806 "cs-parser.jay" +void case_1042() +#line 7039 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9939,8 +10239,8 @@ void case_1005() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1006() -#line 6813 "cs-parser.jay" +void case_1043() +#line 7046 "cs-parser.jay" { var obj = (object[]) yyVals[0+yyTop]; @@ -9951,22 +10251,22 @@ void case_1006() current_block = current_block.Parent; } -void case_1008() -#line 6830 "cs-parser.jay" +void case_1045() +#line 7063 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new object[2] { null, Location.Null }; } -void case_1010() -#line 6839 "cs-parser.jay" +void case_1047() +#line 7072 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_1017() -#line 6859 "cs-parser.jay" +void case_1054() +#line 7092 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -9979,8 +10279,8 @@ void case_1017() ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_1019() -#line 6878 "cs-parser.jay" +void case_1056() +#line 7111 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -9988,8 +10288,8 @@ void case_1019() current_block = current_block.Parent; } -void case_1020() -#line 6888 "cs-parser.jay" +void case_1057() +#line 7121 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack<Linq.QueryBlock> (); @@ -9998,8 +10298,8 @@ void case_1020() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1021() -#line 6896 "cs-parser.jay" +void case_1058() +#line 7129 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10008,8 +10308,8 @@ void case_1021() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1022() -#line 6904 "cs-parser.jay" +void case_1059() +#line 7137 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10018,8 +10318,8 @@ void case_1022() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1023() -#line 6912 "cs-parser.jay" +void case_1060() +#line 7145 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10058,8 +10358,8 @@ void case_1023() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_1024() -#line 6950 "cs-parser.jay" +void case_1061() +#line 7183 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack<Linq.QueryBlock> (); @@ -10068,8 +10368,8 @@ void case_1024() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1025() -#line 6958 "cs-parser.jay" +void case_1062() +#line 7191 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10078,8 +10378,8 @@ void case_1025() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1026() -#line 6966 "cs-parser.jay" +void case_1063() +#line 7199 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10088,8 +10388,8 @@ void case_1026() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1027() -#line 6974 "cs-parser.jay" +void case_1064() +#line 7207 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10132,22 +10432,22 @@ void case_1027() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_1029() -#line 7020 "cs-parser.jay" +void case_1066() +#line 7253 "cs-parser.jay" { opt_intoStack.Push (GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } -void case_1030() -#line 7028 "cs-parser.jay" +void case_1067() +#line 7261 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); lbag.AddLocation (current_block, GetLocation (yyVals[0+yyTop])); } -void case_1031() -#line 7033 "cs-parser.jay" +void case_1068() +#line 7266 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10155,8 +10455,8 @@ void case_1031() yyVal = yyVals[0+yyTop]; } -void case_1033() -#line 7044 "cs-parser.jay" +void case_1070() +#line 7277 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10164,15 +10464,15 @@ void case_1033() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1034() -#line 7051 "cs-parser.jay" +void case_1071() +#line 7284 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_1036() -#line 7060 "cs-parser.jay" +void case_1073() +#line 7293 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10180,43 +10480,43 @@ void case_1036() current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); } -void case_1037() -#line 7067 "cs-parser.jay" +void case_1074() +#line 7300 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_1039() -#line 7079 "cs-parser.jay" +void case_1076() +#line 7312 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1040() -#line 7084 "cs-parser.jay" +void case_1077() +#line 7317 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1042() -#line 7096 "cs-parser.jay" +void case_1079() +#line 7329 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1043() -#line 7101 "cs-parser.jay" +void case_1080() +#line 7334 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1045() -#line 7111 "cs-parser.jay" +void case_1082() +#line 7344 "cs-parser.jay" { /* query continuation block is not linked with query block but with block*/ /* before. This means each query can use same range variable names for*/ @@ -10233,8 +10533,8 @@ void case_1045() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1046() -#line 7127 "cs-parser.jay" +void case_1083() +#line 7360 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (LocatedToken) yyVals[-2+yyTop]; @@ -10244,8 +10544,8 @@ void case_1046() }; } -void case_1049() -#line 7154 "cs-parser.jay" +void case_1086() +#line 7387 "cs-parser.jay" { current_container = current_type = new Class (current_container, new MemberName ("<InteractiveExpressionClass>"), Modifiers.PUBLIC, null); @@ -10274,8 +10574,8 @@ void case_1049() start_block (lexer.Location); } -void case_1050() -#line 7182 "cs-parser.jay" +void case_1087() +#line 7415 "cs-parser.jay" { --lexer.parsing_block; var method = (InteractiveMethod) oob_stack.Pop (); @@ -10289,24 +10589,24 @@ void case_1050() current_local_parameters = null; } -void case_1060() -#line 7228 "cs-parser.jay" +void case_1097() +#line 7461 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; yyVal = null; } -void case_1061() -#line 7234 "cs-parser.jay" +void case_1098() +#line 7467 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])); module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; yyVal = null; } -void case_1062() -#line 7240 "cs-parser.jay" +void case_1099() +#line 7473 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; @@ -10314,15 +10614,15 @@ void case_1062() yyVal = new MemberName (lt.Value); } -void case_1065() -#line 7255 "cs-parser.jay" +void case_1102() +#line 7488 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); } -void case_1066() -#line 7260 "cs-parser.jay" +void case_1103() +#line 7493 "cs-parser.jay" { var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -10331,8 +10631,8 @@ void case_1066() yyVal = null; } -void case_1067() -#line 7268 "cs-parser.jay" +void case_1104() +#line 7501 "cs-parser.jay" { var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -10341,8 +10641,8 @@ void case_1067() yyVal = null; } -void case_1068() -#line 7276 "cs-parser.jay" +void case_1105() +#line 7509 "cs-parser.jay" { var p = (List<DocumentationParameter>)yyVals[0+yyTop]; module.DocumentationBuilder.ParsedParameters = p; @@ -10350,24 +10650,24 @@ void case_1068() yyVal = null; } -void case_1076() -#line 7314 "cs-parser.jay" +void case_1113() +#line 7547 "cs-parser.jay" { var parameters = new List<DocumentationParameter> (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_1077() -#line 7320 "cs-parser.jay" +void case_1114() +#line 7553 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List<DocumentationParameter>; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_1078() -#line 7329 "cs-parser.jay" +void case_1115() +#line 7562 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -10379,165 +10679,171 @@ void case_1078() static readonly short [] yyLhs = { -1, 0, 4, 0, 0, 1, 1, 1, 1, 2, 2, 11, 11, 12, 12, 13, 13, 14, 15, 15, 15, - 19, 20, 17, 17, 22, 22, 22, 18, 18, 18, - 23, 23, 24, 24, 7, 7, 6, 6, 21, 21, - 8, 8, 25, 25, 25, 26, 26, 26, 26, 26, - 9, 9, 10, 10, 34, 32, 37, 33, 33, 33, - 33, 35, 35, 35, 36, 36, 41, 38, 39, 40, - 40, 42, 42, 42, 42, 42, 43, 43, 43, 47, - 44, 46, 49, 49, 49, 51, 51, 52, 52, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 67, 62, 72, 74, 77, 78, 79, - 28, 28, 82, 54, 54, 83, 83, 84, 84, 85, - 87, 81, 81, 86, 86, 92, 55, 96, 55, 55, - 91, 99, 91, 93, 93, 100, 100, 101, 102, 101, - 97, 97, 103, 103, 104, 105, 95, 95, 98, 98, - 98, 108, 56, 111, 112, 106, 113, 114, 115, 106, - 106, 106, 107, 107, 117, 117, 120, 118, 110, 110, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 122, 122, 125, 125, 125, 125, 128, 125, 126, 126, - 129, 129, 130, 130, 130, 123, 123, 123, 131, 131, - 131, 124, 133, 135, 136, 138, 57, 139, 57, 137, - 141, 137, 140, 140, 143, 145, 59, 144, 144, 134, - 134, 134, 134, 134, 149, 146, 150, 147, 148, 148, - 148, 151, 152, 153, 155, 29, 29, 154, 154, 156, - 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 159, 60, 160, 160, 163, 158, 158, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 165, - 164, 166, 164, 164, 164, 61, 169, 171, 167, 168, - 168, 170, 170, 175, 173, 176, 173, 173, 173, 177, - 63, 179, 58, 182, 183, 58, 58, 178, 185, 178, - 180, 180, 186, 186, 187, 188, 187, 189, 184, 181, - 181, 181, 181, 181, 193, 190, 194, 191, 192, 192, - 64, 65, 196, 198, 199, 30, 195, 195, 195, 197, - 197, 197, 200, 200, 201, 202, 201, 201, 201, 203, - 204, 205, 31, 206, 206, 16, 16, 16, 207, 207, - 207, 211, 211, 209, 209, 209, 212, 212, 214, 71, - 132, 109, 109, 142, 142, 215, 215, 215, 213, 213, - 216, 216, 217, 217, 219, 219, 90, 80, 80, 94, - 94, 127, 127, 161, 161, 221, 221, 221, 220, 224, - 224, 224, 226, 226, 227, 225, 225, 225, 225, 225, - 225, 225, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 230, 230, 230, 231, 231, 231, 251, 251, 252, - 252, 253, 253, 233, 233, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, - 255, 255, 256, 256, 257, 257, 259, 259, 259, 260, - 260, 260, 260, 260, 260, 260, 261, 261, 174, 174, - 254, 254, 254, 254, 254, 266, 266, 265, 265, 267, - 267, 267, 267, 268, 236, 236, 236, 236, 264, 264, - 269, 269, 270, 270, 237, 238, 238, 239, 240, 241, - 241, 232, 232, 232, 232, 232, 275, 271, 242, 242, - 276, 276, 277, 277, 278, 278, 278, 278, 279, 279, - 279, 279, 272, 272, 222, 222, 274, 274, 280, 280, - 273, 273, 89, 89, 281, 281, 243, 282, 282, 210, - 208, 244, 244, 245, 245, 246, 246, 247, 284, 248, - 285, 248, 283, 283, 287, 286, 234, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 290, - 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 292, 292, 292, - 292, 292, 294, 294, 294, 294, 295, 295, 295, 295, - 295, 296, 296, 296, 296, 296, 296, 296, 296, 296, - 297, 297, 297, 297, 297, 298, 298, 298, 299, 299, - 299, 300, 300, 300, 301, 301, 301, 302, 302, 302, - 303, 303, 304, 304, 304, 304, 304, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, - 307, 307, 307, 307, 308, 308, 310, 309, 309, 309, - 50, 50, 312, 311, 313, 311, 314, 311, 315, 316, - 311, 317, 318, 311, 45, 45, 262, 262, 262, 262, - 249, 249, 249, 88, 320, 73, 73, 321, 322, 322, - 322, 322, 324, 322, 325, 326, 327, 328, 27, 70, - 70, 69, 69, 116, 116, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - 75, 75, 323, 323, 76, 76, 330, 330, 331, 331, - 332, 332, 333, 333, 333, 333, 218, 218, 334, 334, - 335, 119, 68, 68, 336, 172, 172, 338, 337, 66, - 66, 339, 339, 340, 340, 340, 340, 340, 344, 344, - 345, 345, 345, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 360, - 360, 360, 360, 347, 361, 343, 362, 362, 363, 363, - 363, 363, 223, 223, 364, 48, 48, 366, 341, 370, - 341, 368, 368, 365, 365, 365, 367, 367, 374, 374, - 373, 373, 375, 375, 369, 369, 371, 371, 376, 376, - 377, 372, 372, 372, 348, 348, 348, 359, 359, 378, - 379, 379, 349, 349, 380, 380, 380, 383, 381, 381, - 382, 382, 384, 384, 384, 385, 386, 386, 387, 387, - 387, 350, 350, 350, 350, 388, 388, 389, 389, 389, - 393, 390, 396, 392, 392, 399, 395, 395, 398, 398, - 394, 394, 402, 401, 401, 397, 397, 400, 400, 404, - 403, 403, 391, 391, 405, 391, 391, 391, 351, 351, - 351, 351, 351, 351, 406, 407, 407, 408, 408, 408, - 409, 409, 409, 410, 410, 410, 411, 411, 411, 412, - 412, 352, 352, 352, 352, 413, 413, 293, 293, 414, - 416, 414, 414, 414, 415, 415, 353, 354, 417, 357, - 355, 355, 419, 420, 358, 422, 423, 356, 356, 356, - 421, 421, 418, 418, 319, 319, 319, 319, 424, 424, - 426, 426, 428, 427, 429, 427, 425, 425, 425, 425, - 425, 433, 431, 434, 436, 431, 435, 435, 430, 430, - 437, 437, 437, 437, 437, 442, 438, 443, 439, 444, - 445, 446, 440, 448, 449, 450, 440, 447, 447, 452, - 441, 451, 455, 451, 454, 457, 454, 453, 453, 453, - 456, 456, 456, 432, 458, 432, 3, 3, 459, 3, - 3, 460, 460, 263, 263, 258, 258, 5, 461, 461, - 461, 461, 461, 465, 461, 461, 461, 461, 462, 462, - 463, 466, 463, 464, 464, 467, 467, 468, + 16, 16, 20, 21, 18, 18, 23, 23, 23, 19, + 19, 19, 24, 24, 25, 25, 7, 7, 6, 6, + 22, 22, 8, 8, 26, 26, 26, 27, 27, 27, + 27, 27, 9, 9, 10, 10, 35, 33, 38, 34, + 34, 34, 34, 36, 36, 36, 37, 37, 42, 39, + 40, 41, 41, 43, 43, 43, 43, 43, 44, 44, + 44, 48, 45, 47, 51, 50, 50, 50, 53, 53, + 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 69, 64, 74, 76, + 79, 80, 81, 29, 29, 84, 56, 56, 85, 85, + 86, 86, 87, 89, 83, 83, 88, 88, 94, 57, + 98, 57, 57, 93, 101, 93, 95, 95, 102, 102, + 103, 104, 103, 99, 99, 105, 105, 106, 107, 97, + 97, 100, 100, 100, 110, 58, 113, 114, 108, 115, + 116, 117, 108, 108, 108, 109, 109, 119, 119, 122, + 120, 112, 112, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 124, 124, 127, 127, 127, 127, 130, + 127, 128, 128, 131, 131, 132, 132, 132, 125, 125, + 125, 133, 133, 133, 126, 135, 137, 138, 140, 59, + 141, 59, 139, 143, 139, 142, 142, 145, 147, 61, + 146, 146, 136, 136, 136, 136, 136, 151, 148, 152, + 149, 150, 150, 150, 153, 154, 155, 157, 30, 30, + 156, 156, 158, 158, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 161, 62, 162, 162, 165, 160, 160, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 167, 166, 168, 166, 166, 166, 63, + 171, 173, 169, 170, 170, 172, 172, 177, 175, 178, + 175, 175, 175, 179, 65, 181, 60, 184, 185, 60, + 60, 180, 187, 180, 182, 182, 188, 188, 189, 190, + 189, 191, 186, 183, 183, 183, 183, 183, 195, 192, + 196, 193, 194, 194, 66, 67, 198, 200, 201, 31, + 197, 197, 197, 199, 199, 199, 202, 202, 203, 204, + 203, 203, 203, 205, 206, 207, 32, 208, 208, 17, + 17, 17, 209, 209, 209, 213, 213, 211, 211, 211, + 214, 214, 216, 73, 134, 111, 111, 144, 144, 217, + 217, 217, 215, 215, 218, 218, 219, 219, 221, 221, + 92, 82, 82, 96, 96, 129, 129, 163, 163, 223, + 223, 223, 222, 226, 226, 226, 228, 228, 229, 227, + 227, 227, 227, 227, 227, 227, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 232, 232, 232, 233, + 233, 233, 254, 254, 252, 252, 255, 255, 256, 256, + 257, 256, 258, 256, 259, 259, 260, 260, 235, 235, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 237, 237, 237, 262, 262, 263, 263, 264, + 264, 266, 266, 266, 267, 267, 267, 267, 267, 267, + 267, 268, 268, 176, 176, 261, 261, 261, 261, 261, + 273, 273, 272, 272, 274, 274, 274, 274, 274, 274, + 276, 276, 276, 275, 238, 238, 238, 238, 271, 271, + 278, 278, 279, 279, 239, 240, 240, 241, 242, 243, + 243, 234, 234, 234, 234, 234, 284, 280, 244, 244, + 285, 285, 286, 286, 287, 287, 287, 287, 288, 288, + 288, 288, 281, 281, 224, 224, 283, 283, 289, 289, + 282, 282, 91, 91, 290, 290, 245, 291, 291, 212, + 210, 246, 246, 247, 247, 248, 248, 249, 293, 250, + 294, 250, 292, 292, 296, 295, 236, 297, 297, 297, + 297, 297, 297, 297, 297, 297, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, + 299, 299, 299, 299, 299, 299, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 301, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 304, 305, + 307, 307, 308, 309, 309, 306, 306, 310, 310, 311, + 311, 312, 312, 312, 312, 312, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 314, 314, 314, 314, 314, + 315, 315, 315, 316, 316, 316, 317, 317, 317, 318, + 318, 318, 319, 319, 319, 320, 320, 321, 321, 321, + 321, 321, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 323, 323, 324, 324, 324, 324, 325, + 325, 327, 326, 326, 326, 52, 52, 329, 328, 330, + 328, 331, 328, 332, 333, 328, 334, 335, 328, 46, + 46, 269, 269, 269, 269, 251, 251, 251, 90, 337, + 75, 75, 338, 339, 339, 339, 339, 341, 339, 342, + 343, 344, 345, 28, 72, 72, 71, 71, 118, 118, + 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, + 346, 346, 346, 346, 346, 77, 77, 340, 340, 78, + 78, 347, 347, 348, 348, 349, 349, 350, 350, 350, + 350, 220, 220, 351, 351, 352, 121, 70, 70, 353, + 174, 174, 355, 354, 68, 68, 356, 356, 357, 357, + 357, 357, 357, 361, 361, 362, 362, 362, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 363, 363, 363, 363, 363, 363, 363, 363, 363, + 363, 363, 363, 363, 377, 377, 377, 377, 364, 378, + 360, 277, 277, 379, 379, 379, 379, 225, 225, 380, + 49, 49, 382, 358, 386, 358, 384, 384, 381, 381, + 381, 383, 383, 390, 390, 389, 389, 391, 391, 385, + 385, 387, 387, 392, 392, 393, 388, 388, 388, 365, + 365, 365, 376, 376, 394, 395, 395, 366, 366, 396, + 396, 396, 399, 397, 397, 398, 398, 400, 400, 400, + 401, 402, 402, 403, 403, 403, 367, 367, 367, 367, + 404, 404, 405, 405, 405, 409, 406, 412, 408, 408, + 415, 411, 411, 414, 414, 410, 410, 418, 417, 417, + 413, 413, 416, 416, 420, 419, 419, 407, 407, 421, + 407, 407, 407, 368, 368, 368, 368, 368, 368, 422, + 423, 423, 424, 424, 424, 425, 425, 425, 426, 426, + 426, 427, 427, 427, 428, 428, 369, 369, 369, 369, + 429, 429, 302, 302, 430, 433, 430, 430, 432, 432, + 431, 434, 431, 370, 371, 435, 374, 372, 372, 437, + 438, 375, 440, 441, 373, 373, 373, 439, 439, 436, + 436, 336, 336, 336, 336, 442, 442, 444, 444, 446, + 445, 447, 445, 443, 443, 443, 443, 443, 451, 449, + 452, 454, 449, 453, 453, 448, 448, 455, 455, 455, + 455, 455, 460, 456, 461, 457, 462, 463, 464, 458, + 466, 467, 468, 458, 465, 465, 470, 459, 469, 473, + 469, 472, 475, 472, 471, 471, 471, 474, 474, 474, + 450, 476, 450, 3, 3, 477, 3, 3, 478, 478, + 270, 270, 265, 265, 5, 479, 479, 479, 479, 479, + 483, 479, 479, 479, 479, 480, 480, 481, 484, 481, + 482, 482, 485, 485, 486, }; static readonly short [] yyLen = { 2, 2, 0, 3, 1, 2, 4, 3, 1, 0, 1, - 1, 2, 4, 2, 1, 2, 1, 3, 5, 2, - 0, 0, 11, 3, 0, 1, 1, 1, 3, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, - 0, 1, 1, 2, 0, 3, 0, 6, 3, 2, - 1, 1, 1, 1, 1, 3, 0, 3, 1, 0, - 3, 0, 1, 1, 3, 3, 1, 1, 1, 0, - 4, 4, 0, 1, 1, 0, 1, 1, 2, 1, + 1, 2, 4, 2, 1, 2, 1, 4, 6, 2, + 0, 1, 0, 0, 11, 3, 0, 1, 1, 1, + 3, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 1, 2, 1, 1, 2, 1, 1, 1, + 1, 1, 0, 1, 1, 2, 0, 3, 0, 6, + 3, 2, 1, 1, 1, 1, 1, 3, 0, 3, + 1, 0, 3, 0, 1, 1, 3, 3, 1, 1, + 1, 0, 4, 4, 1, 0, 1, 1, 0, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, + 0, 0, 0, 17, 5, 0, 9, 5, 0, 1, + 1, 2, 3, 0, 3, 1, 1, 1, 0, 8, + 0, 9, 6, 0, 0, 3, 0, 1, 1, 2, + 2, 0, 5, 0, 1, 1, 2, 3, 0, 4, + 2, 1, 1, 1, 0, 3, 0, 0, 10, 0, + 0, 0, 12, 8, 5, 1, 1, 1, 1, 0, + 4, 0, 1, 1, 3, 3, 3, 5, 3, 5, + 1, 1, 1, 1, 3, 4, 6, 2, 4, 0, + 7, 0, 1, 1, 2, 1, 1, 1, 4, 6, + 4, 1, 2, 2, 1, 0, 0, 0, 0, 12, + 0, 6, 0, 0, 4, 1, 1, 0, 0, 10, + 3, 1, 1, 2, 1, 2, 1, 0, 5, 0, + 5, 1, 1, 1, 0, 0, 0, 0, 15, 5, + 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 5, 1, 1, 0, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 0, 0, 0, 0, 0, - 17, 5, 0, 9, 5, 0, 1, 1, 2, 3, - 0, 3, 1, 1, 1, 0, 8, 0, 9, 6, - 0, 0, 3, 0, 1, 1, 2, 2, 0, 5, - 0, 1, 1, 2, 3, 0, 4, 2, 1, 1, - 1, 0, 3, 0, 0, 10, 0, 0, 0, 12, - 8, 5, 1, 1, 1, 1, 0, 4, 0, 1, - 1, 3, 3, 3, 5, 3, 5, 1, 1, 1, - 1, 3, 4, 6, 2, 4, 0, 7, 0, 1, - 1, 2, 1, 1, 1, 4, 6, 4, 1, 2, - 2, 1, 0, 0, 0, 0, 12, 0, 6, 0, - 0, 4, 1, 1, 0, 0, 10, 3, 1, 1, - 2, 1, 2, 1, 0, 5, 0, 5, 1, 1, - 1, 0, 0, 0, 0, 15, 5, 0, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 5, 1, 1, 0, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 7, 0, 7, 2, 2, 2, 0, 0, 9, 1, - 1, 0, 1, 0, 6, 0, 6, 2, 1, 0, - 8, 0, 9, 0, 0, 10, 5, 0, 0, 3, - 0, 1, 1, 2, 2, 0, 5, 0, 2, 2, - 2, 1, 1, 1, 0, 5, 0, 5, 1, 1, - 2, 4, 0, 0, 0, 12, 0, 2, 2, 0, - 1, 2, 1, 3, 2, 0, 5, 3, 1, 0, - 0, 0, 13, 0, 1, 1, 3, 3, 1, 4, - 4, 2, 2, 0, 3, 2, 1, 3, 0, 3, - 1, 1, 3, 1, 2, 3, 4, 4, 0, 3, - 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, - 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 7, 0, 7, 2, 2, 2, + 0, 0, 9, 1, 1, 0, 1, 0, 6, 0, + 6, 2, 1, 0, 8, 0, 9, 0, 0, 10, + 5, 0, 0, 3, 0, 1, 1, 2, 2, 0, + 5, 0, 2, 2, 2, 1, 1, 1, 0, 5, + 0, 5, 1, 1, 2, 4, 0, 0, 0, 12, + 0, 2, 2, 0, 1, 2, 1, 3, 2, 0, + 5, 3, 1, 0, 0, 0, 13, 0, 1, 1, + 3, 3, 1, 4, 4, 2, 2, 0, 3, 2, + 1, 3, 0, 3, 1, 1, 3, 1, 2, 3, + 4, 4, 0, 3, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 1, 1, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 3, 4, 4, 5, 4, 4, - 4, 3, 3, 3, 4, 3, 4, 4, 4, 3, - 0, 1, 3, 4, 0, 1, 1, 3, 2, 3, - 3, 1, 2, 3, 5, 2, 1, 1, 0, 1, - 1, 3, 3, 3, 2, 1, 1, 1, 1, 2, - 2, 4, 3, 1, 4, 5, 4, 3, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 3, 1, 1, 3, 1, 3, + 0, 4, 0, 6, 1, 1, 1, 1, 3, 3, + 4, 4, 5, 4, 4, 4, 3, 3, 3, 4, + 3, 4, 4, 4, 3, 0, 1, 3, 4, 0, + 1, 1, 3, 2, 3, 3, 1, 2, 3, 5, + 2, 1, 1, 0, 1, 1, 3, 3, 3, 2, + 1, 1, 1, 1, 2, 2, 2, 2, 4, 3, + 3, 2, 4, 1, 4, 5, 4, 3, 1, 3, 1, 3, 1, 1, 1, 4, 3, 2, 2, 6, 3, 7, 4, 3, 7, 3, 0, 2, 4, 3, 1, 2, 0, 1, 1, 3, 1, 2, 3, 1, @@ -10548,1526 +10854,1600 @@ void case_1078() 4, 2, 2, 2, 4, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, - 3, 3, 4, 3, 3, 3, 3, 1, 2, 1, - 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, - 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, - 1, 3, 3, 3, 3, 1, 3, 3, 1, 3, - 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, - 1, 3, 1, 5, 4, 5, 5, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, - 3, 2, 1, 1, 0, 1, 0, 2, 1, 1, - 1, 1, 0, 4, 0, 4, 0, 5, 0, 0, - 7, 0, 0, 8, 1, 1, 1, 1, 1, 1, - 6, 4, 4, 1, 1, 0, 1, 3, 0, 1, - 1, 2, 0, 6, 0, 0, 0, 0, 15, 0, - 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 2, 3, 0, 1, 1, 2, 4, 3, - 1, 3, 1, 3, 1, 1, 0, 1, 1, 1, - 0, 4, 1, 1, 0, 4, 1, 0, 4, 0, - 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, + 3, 3, 4, 3, 3, 3, 3, 3, 1, 1, + 2, 2, 1, 1, 4, 1, 1, 1, 4, 4, + 1, 3, 3, 1, 2, 0, 1, 1, 3, 1, + 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, + 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, + 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 1, 5, 4, + 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 3, 3, 2, 1, 1, 0, + 1, 0, 2, 1, 1, 1, 1, 0, 4, 0, + 4, 0, 5, 0, 0, 7, 0, 0, 8, 1, + 1, 1, 1, 1, 1, 6, 4, 4, 1, 1, + 0, 1, 3, 0, 1, 1, 2, 0, 6, 0, + 0, 0, 0, 15, 0, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 2, 3, 0, + 1, 1, 2, 4, 3, 1, 3, 1, 3, 1, + 1, 0, 1, 1, 1, 0, 4, 1, 1, 0, + 4, 1, 0, 4, 0, 1, 1, 2, 1, 1, + 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 1, 2, 2, 2, - 1, 1, 1, 2, 1, 1, 1, 0, 6, 0, - 7, 1, 1, 0, 2, 1, 0, 1, 0, 1, - 1, 2, 2, 4, 0, 2, 0, 1, 1, 2, - 4, 1, 5, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 5, 7, 4, 0, 8, 4, - 0, 1, 1, 2, 1, 2, 1, 2, 3, 3, - 1, 1, 1, 1, 1, 5, 4, 7, 3, 6, - 0, 4, 0, 4, 2, 0, 4, 2, 3, 1, - 0, 1, 0, 5, 1, 0, 1, 0, 1, 1, - 1, 3, 4, 5, 0, 9, 5, 4, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 3, 4, 3, - 3, 3, 2, 3, 3, 2, 4, 4, 3, 0, - 1, 3, 4, 5, 3, 1, 2, 0, 1, 3, - 0, 8, 3, 6, 0, 4, 2, 2, 0, 3, - 5, 4, 0, 0, 10, 0, 0, 9, 5, 4, - 2, 1, 0, 2, 2, 2, 2, 2, 4, 5, - 4, 5, 0, 5, 0, 6, 3, 2, 2, 2, - 1, 0, 3, 0, 0, 5, 2, 1, 1, 2, - 1, 1, 1, 1, 1, 0, 5, 0, 3, 0, - 0, 0, 12, 0, 0, 0, 13, 0, 2, 0, - 3, 1, 0, 4, 1, 0, 4, 1, 2, 2, - 1, 2, 2, 0, 0, 4, 2, 3, 0, 4, - 2, 2, 3, 0, 1, 1, 1, 2, 2, 2, - 2, 4, 3, 0, 7, 4, 4, 3, 1, 3, - 0, 0, 4, 0, 1, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 4, 1, 2, 2, 2, 1, 1, 1, 2, 1, + 1, 1, 0, 6, 0, 7, 1, 1, 0, 2, + 1, 0, 1, 0, 1, 1, 2, 2, 4, 0, + 2, 0, 1, 1, 2, 4, 1, 5, 2, 2, + 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, + 7, 4, 0, 8, 4, 0, 1, 1, 2, 1, + 2, 1, 2, 3, 3, 1, 1, 1, 1, 1, + 5, 4, 7, 3, 6, 0, 4, 0, 4, 2, + 0, 4, 2, 3, 1, 0, 1, 0, 5, 1, + 0, 1, 0, 1, 1, 1, 3, 4, 5, 0, + 9, 5, 4, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 3, 4, 3, 3, 3, 2, 3, 3, + 2, 4, 4, 3, 0, 1, 3, 4, 5, 3, + 1, 2, 0, 1, 3, 0, 7, 3, 2, 1, + 0, 0, 5, 2, 2, 0, 3, 5, 4, 0, + 0, 10, 0, 0, 9, 5, 4, 2, 1, 0, + 2, 2, 2, 2, 2, 4, 5, 4, 5, 0, + 5, 0, 6, 3, 2, 2, 2, 1, 0, 3, + 0, 0, 5, 2, 1, 1, 2, 1, 1, 1, + 1, 1, 0, 5, 0, 3, 0, 0, 0, 12, + 0, 0, 0, 13, 0, 2, 0, 3, 1, 0, + 4, 1, 0, 4, 1, 2, 2, 1, 2, 2, + 0, 0, 4, 2, 3, 0, 4, 2, 2, 3, + 0, 1, 1, 1, 2, 2, 2, 2, 4, 3, + 0, 7, 4, 4, 3, 1, 3, 0, 0, 4, + 0, 1, 1, 3, 2, }; static readonly short [] yyDefRed = { 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 4, - 0, 0, 11, 14, 0, 1047, 0, 0, 1051, 0, - 0, 15, 17, 408, 414, 421, 409, 411, 0, 410, - 0, 417, 419, 406, 0, 413, 415, 407, 418, 420, - 416, 0, 369, 1069, 0, 412, 1058, 0, 10, 1, - 0, 0, 0, 12, 0, 872, 0, 0, 0, 0, - 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, - 0, 0, 447, 0, 0, 0, 515, 0, 448, 0, - 0, 0, 969, 0, 0, 0, 710, 0, 0, 0, - 0, 0, 0, 0, 771, 0, 824, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 0, 699, 0, 871, - 0, 807, 0, 442, 832, 831, 0, 0, 0, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 444, 445, - 706, 587, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 707, 705, 708, 709, 791, 793, - 0, 789, 792, 808, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 809, 0, 0, 0, 873, 874, - 892, 893, 894, 895, 929, 930, 931, 932, 933, 934, - 0, 0, 0, 20, 0, 0, 356, 0, 359, 1055, - 16, 1048, 0, 0, 263, 262, 259, 264, 265, 258, - 277, 276, 269, 270, 266, 268, 267, 271, 260, 261, - 272, 273, 279, 278, 274, 275, 0, 1072, 1061, 0, - 0, 1060, 0, 1059, 3, 55, 0, 0, 0, 44, - 41, 43, 46, 47, 48, 49, 50, 53, 13, 0, - 0, 0, 935, 565, 450, 451, 967, 0, 0, 0, - 0, 0, 0, 0, 0, 937, 936, 0, 575, 569, - 574, 823, 870, 794, 821, 820, 822, 795, 796, 797, - 798, 799, 800, 801, 802, 803, 804, 805, 806, 0, - 0, 0, 901, 0, 0, 0, 837, 836, 0, 0, - 0, 0, 0, 0, 0, 0, 943, 0, 0, 0, - 0, 422, 0, 0, 0, 946, 0, 0, 0, 0, - 567, 968, 0, 0, 0, 835, 402, 0, 0, 0, - 0, 0, 0, 388, 389, 0, 398, 0, 0, 0, - 0, 0, 0, 0, 702, 0, 586, 0, 0, 695, - 0, 0, 582, 0, 0, 584, 580, 594, 588, 595, - 589, 583, 579, 599, 593, 598, 592, 596, 590, 597, - 591, 693, 561, 0, 560, 443, 362, 363, 0, 0, - 0, 0, 0, 825, 0, 355, 0, 400, 401, 0, - 0, 518, 519, 0, 0, 0, 829, 830, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1050, 790, 838, 828, 0, 868, 869, 1001, 1018, - 0, 0, 1002, 1004, 0, 1030, 987, 985, 1011, 0, - 0, 1009, 1012, 1013, 1014, 1015, 988, 986, 0, 0, - 0, 0, 18, 0, 0, 0, 1068, 0, 0, 370, - 0, 0, 1070, 0, 0, 42, 741, 747, 739, 0, - 736, 746, 740, 738, 737, 744, 742, 743, 749, 745, - 748, 750, 0, 0, 734, 45, 54, 517, 0, 513, - 514, 0, 0, 511, 0, 840, 0, 0, 0, 899, - 0, 867, 865, 866, 0, 0, 0, 714, 0, 940, - 938, 715, 0, 0, 542, 0, 0, 530, 537, 0, - 0, 0, 531, 0, 0, 547, 549, 0, 526, 0, - 0, 0, 0, 0, 521, 0, 524, 528, 391, 390, - 942, 941, 0, 0, 945, 944, 955, 0, 0, 0, - 956, 559, 0, 385, 558, 0, 0, 970, 0, 0, - 834, 0, 396, 397, 0, 0, 395, 0, 0, 0, - 600, 0, 0, 571, 0, 697, 617, 616, 0, 0, - 788, 0, 0, 0, 782, 784, 785, 786, 454, 455, - 0, 366, 367, 0, 194, 193, 195, 0, 684, 0, - 0, 0, 392, 0, 679, 0, 0, 949, 0, 0, - 0, 462, 463, 0, 466, 0, 0, 0, 0, 464, - 0, 0, 508, 0, 470, 0, 0, 0, 0, 496, - 499, 0, 0, 491, 498, 497, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 678, 677, 604, 601, 606, - 603, 605, 602, 614, 612, 615, 0, 0, 626, 625, - 0, 0, 0, 0, 610, 0, 611, 0, 630, 0, - 0, 631, 0, 637, 0, 638, 0, 639, 0, 640, - 0, 644, 0, 645, 0, 648, 0, 651, 0, 654, - 0, 657, 0, 660, 0, 662, 0, 0, 546, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1000, 999, - 0, 1010, 0, 998, 0, 0, 357, 358, 1066, 1067, - 0, 0, 191, 0, 0, 1076, 384, 0, 0, 0, - 381, 1062, 1064, 61, 63, 64, 0, 0, 56, 0, - 0, 65, 67, 30, 28, 0, 0, 0, 731, 0, - 735, 460, 0, 516, 0, 564, 0, 577, 180, 202, - 0, 0, 0, 170, 0, 0, 0, 181, 570, 0, - 973, 0, 921, 902, 0, 912, 0, 923, 0, 939, - 877, 0, 972, 0, 0, 529, 0, 538, 548, 550, - 0, 0, 0, 0, 482, 0, 0, 477, 0, 0, - 692, 691, 509, 0, 552, 523, 0, 0, 151, 553, - 149, 150, 555, 0, 563, 562, 880, 0, 0, 0, - 0, 953, 0, 957, 557, 566, 980, 0, 976, 897, - 0, 991, 0, 989, 0, 0, 712, 713, 0, 0, - 0, 690, 689, 696, 0, 461, 787, 773, 774, 772, - 783, 694, 0, 365, 682, 0, 0, 0, 585, 581, - 948, 947, 826, 467, 459, 0, 0, 465, 456, 457, - 568, 507, 505, 504, 501, 500, 0, 495, 452, 453, - 468, 469, 0, 621, 622, 623, 624, 959, 613, 619, - 665, 0, 846, 0, 0, 1019, 993, 0, 1020, 0, - 1003, 1005, 1016, 0, 1031, 0, 997, 1045, 19, 360, - 361, 1078, 192, 1073, 0, 770, 769, 0, 768, 0, - 380, 0, 60, 57, 0, 0, 0, 0, 0, 0, - 387, 0, 725, 0, 0, 85, 84, 0, 512, 0, - 0, 0, 0, 0, 185, 576, 0, 0, 0, 0, - 0, 913, 905, 903, 0, 924, 0, 0, 971, 539, - 536, 0, 486, 0, 0, 0, 1056, 1057, 473, 479, - 0, 483, 0, 0, 0, 0, 0, 0, 878, 0, - 963, 0, 960, 954, 979, 0, 896, 992, 990, 0, - 572, 0, 698, 688, 368, 681, 680, 700, 458, 506, - 503, 0, 494, 493, 492, 666, 667, 664, 0, 862, - 845, 0, 0, 0, 851, 0, 995, 0, 1024, 0, - 0, 1039, 1040, 1033, 0, 1077, 383, 382, 0, 0, - 66, 59, 0, 68, 29, 22, 0, 0, 333, 0, - 237, 0, 112, 0, 82, 856, 124, 125, 0, 0, - 0, 859, 200, 201, 0, 0, 0, 0, 173, 182, - 174, 176, 900, 0, 0, 0, 0, 0, 922, 0, - 0, 487, 488, 481, 484, 480, 0, 474, 478, 0, - 544, 0, 510, 520, 472, 556, 554, 0, 0, 0, - 982, 0, 0, 711, 703, 0, 502, 0, 0, 843, - 842, 839, 852, 994, 0, 0, 0, 1008, 0, 1006, - 1017, 0, 1046, 1065, 0, 79, 0, 0, 73, 74, - 77, 78, 0, 350, 339, 338, 0, 726, 233, 107, - 0, 841, 860, 186, 0, 198, 0, 0, 0, 898, - 984, 0, 0, 0, 0, 904, 0, 925, 876, 0, - 525, 522, 885, 0, 891, 0, 0, 883, 0, 887, - 966, 0, 981, 977, 0, 701, 0, 0, 996, 1021, - 0, 1007, 0, 0, 1035, 0, 80, 71, 0, 0, - 0, 334, 0, 0, 0, 0, 0, 187, 0, 177, - 175, 974, 914, 908, 906, 0, 485, 0, 879, 884, - 0, 888, 964, 0, 0, 704, 0, 854, 0, 1025, - 1042, 1043, 1036, 58, 0, 75, 76, 0, 0, 0, - 0, 0, 0, 0, 720, 0, 752, 0, 717, 861, - 184, 0, 197, 0, 0, 926, 890, 889, 0, 978, - 863, 0, 0, 0, 81, 0, 0, 351, 0, 0, - 349, 335, 0, 343, 0, 405, 0, 403, 0, 0, - 727, 0, 757, 234, 0, 188, 975, 910, 907, 0, - 0, 919, 775, 777, 962, 1022, 0, 1037, 0, 0, - 0, 331, 0, 0, 718, 754, 0, 723, 0, 0, - 758, 0, 108, 0, 0, 0, 1026, 27, 26, 23, - 352, 348, 0, 0, 344, 404, 0, 760, 0, 0, - 0, 0, 909, 0, 0, 0, 0, 0, 32, 336, - 0, 765, 0, 766, 763, 0, 761, 103, 104, 0, - 100, 0, 0, 88, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 101, 102, 152, 0, 0, 250, - 242, 243, 244, 245, 246, 247, 248, 249, 0, 0, - 240, 109, 776, 0, 1023, 0, 353, 347, 724, 0, - 0, 0, 0, 728, 89, 0, 291, 286, 290, 0, - 235, 241, 0, 1029, 1027, 764, 762, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 0, 251, 0, - 0, 257, 0, 167, 166, 153, 163, 164, 165, 0, - 0, 0, 105, 0, 0, 285, 0, 0, 284, 0, - 157, 0, 0, 374, 332, 0, 372, 0, 0, 0, - 0, 0, 0, 0, 0, 729, 0, 236, 110, 115, - 113, 307, 0, 371, 0, 0, 0, 0, 128, 0, - 0, 0, 0, 0, 0, 162, 154, 0, 0, 0, - 215, 0, 375, 0, 252, 0, 0, 0, 0, 304, - 0, 282, 130, 0, 280, 0, 0, 0, 132, 0, - 376, 0, 0, 204, 209, 0, 0, 0, 373, 255, - 168, 111, 123, 121, 0, 0, 309, 0, 0, 0, - 0, 0, 158, 0, 288, 0, 0, 0, 0, 136, - 0, 0, 0, 0, 377, 378, 0, 0, 0, 0, - 0, 118, 324, 0, 305, 0, 0, 318, 0, 0, - 0, 313, 0, 148, 0, 0, 0, 0, 143, 0, - 0, 301, 0, 133, 0, 127, 137, 155, 161, 224, - 0, 205, 0, 0, 216, 0, 122, 0, 114, 119, - 0, 0, 0, 320, 0, 321, 310, 0, 0, 303, - 314, 283, 0, 0, 129, 144, 281, 0, 299, 0, - 289, 293, 139, 0, 0, 0, 221, 223, 0, 256, - 120, 325, 327, 306, 0, 0, 319, 316, 147, 145, - 159, 298, 0, 0, 0, 156, 225, 227, 206, 0, - 219, 217, 0, 0, 318, 0, 294, 296, 140, 0, - 0, 0, 0, 329, 330, 326, 328, 317, 160, 0, - 0, 231, 230, 229, 226, 228, 211, 207, 218, 0, - 0, 0, 295, 297, 213, 214, 0, 212, + 0, 0, 11, 14, 0, 1084, 0, 0, 1088, 0, + 0, 15, 17, 412, 418, 425, 413, 415, 0, 414, + 0, 421, 423, 410, 0, 417, 419, 411, 422, 424, + 420, 0, 373, 1106, 0, 416, 1095, 0, 10, 1, + 0, 0, 0, 12, 0, 907, 0, 0, 0, 0, + 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, + 0, 0, 452, 0, 0, 0, 535, 0, 453, 0, + 0, 0, 1006, 0, 0, 0, 745, 0, 0, 0, + 0, 0, 0, 0, 0, 456, 806, 0, 859, 0, + 0, 0, 0, 0, 0, 0, 0, 451, 0, 734, + 0, 906, 0, 842, 0, 447, 867, 866, 0, 0, + 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 449, 450, 741, 0, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 742, 740, + 743, 744, 826, 828, 0, 824, 827, 843, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 844, 0, + 0, 908, 909, 927, 928, 929, 930, 964, 965, 966, + 967, 968, 969, 0, 0, 0, 20, 22, 0, 1092, + 16, 1085, 0, 0, 266, 283, 265, 262, 267, 268, + 261, 280, 279, 272, 273, 269, 271, 270, 274, 263, + 264, 275, 276, 282, 281, 277, 278, 0, 1109, 1098, + 0, 0, 1097, 0, 1096, 3, 57, 0, 0, 0, + 46, 43, 45, 48, 49, 50, 51, 52, 55, 13, + 0, 0, 0, 970, 585, 465, 466, 1004, 0, 0, + 0, 0, 0, 0, 0, 0, 972, 971, 0, 595, + 589, 594, 858, 905, 829, 856, 855, 857, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, + 0, 0, 0, 936, 0, 0, 0, 872, 871, 0, + 0, 0, 0, 0, 0, 0, 0, 978, 0, 0, + 0, 0, 426, 0, 0, 0, 981, 0, 0, 0, + 0, 587, 1005, 0, 0, 0, 870, 406, 0, 0, + 0, 0, 0, 0, 392, 360, 0, 363, 393, 0, + 402, 0, 0, 0, 0, 0, 0, 0, 737, 0, + 606, 0, 0, 730, 0, 0, 602, 0, 0, 457, + 0, 0, 604, 600, 614, 608, 615, 609, 603, 599, + 619, 613, 618, 612, 616, 610, 617, 611, 728, 581, + 0, 580, 448, 366, 367, 0, 0, 0, 0, 0, + 860, 0, 359, 0, 404, 405, 0, 0, 538, 539, + 0, 0, 0, 864, 865, 873, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1087, + 825, 863, 0, 903, 904, 1038, 1055, 0, 0, 1039, + 1041, 0, 1067, 1024, 1022, 1048, 0, 0, 1046, 1049, + 1050, 1051, 1052, 1025, 1023, 0, 0, 0, 0, 0, + 0, 1105, 0, 0, 374, 0, 0, 1107, 0, 0, + 44, 776, 782, 774, 0, 771, 781, 775, 773, 772, + 779, 777, 778, 784, 780, 783, 785, 0, 0, 769, + 47, 56, 537, 0, 533, 534, 0, 0, 531, 0, + 875, 0, 0, 0, 934, 0, 902, 900, 901, 0, + 0, 0, 749, 0, 975, 973, 750, 0, 0, 562, + 0, 0, 550, 557, 0, 0, 0, 551, 0, 0, + 567, 569, 0, 546, 0, 0, 0, 0, 0, 541, + 0, 544, 548, 395, 394, 977, 976, 0, 0, 980, + 979, 990, 0, 0, 0, 991, 579, 0, 389, 578, + 0, 0, 1007, 0, 0, 869, 0, 0, 400, 401, + 0, 0, 0, 399, 0, 0, 0, 620, 0, 0, + 591, 0, 732, 638, 637, 0, 0, 0, 461, 0, + 455, 823, 0, 0, 0, 817, 819, 820, 821, 469, + 470, 0, 370, 371, 0, 197, 196, 198, 0, 719, + 0, 0, 0, 396, 0, 714, 0, 0, 984, 0, + 0, 0, 477, 478, 0, 481, 0, 0, 0, 0, + 479, 0, 0, 528, 0, 485, 0, 0, 0, 0, + 511, 514, 0, 0, 506, 513, 512, 0, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 713, 712, 624, + 621, 626, 623, 625, 622, 635, 632, 636, 0, 0, + 646, 0, 0, 0, 0, 0, 639, 0, 634, 647, + 648, 630, 0, 631, 0, 665, 0, 0, 666, 0, + 672, 0, 673, 0, 674, 0, 675, 0, 679, 0, + 680, 0, 683, 0, 686, 0, 689, 0, 692, 0, + 695, 0, 697, 0, 566, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1037, 1036, 0, 1047, 0, 1035, + 0, 18, 1103, 1104, 0, 0, 194, 0, 0, 1113, + 388, 0, 0, 0, 385, 1099, 1101, 63, 65, 66, + 0, 0, 58, 0, 0, 67, 69, 32, 30, 0, + 0, 0, 766, 0, 770, 475, 0, 536, 0, 584, + 0, 597, 183, 205, 0, 0, 0, 173, 0, 0, + 0, 184, 590, 0, 1010, 0, 956, 937, 0, 947, + 0, 958, 0, 974, 912, 0, 1009, 0, 0, 549, + 0, 558, 568, 570, 0, 0, 0, 0, 497, 0, + 0, 492, 0, 0, 727, 726, 529, 0, 572, 543, + 0, 0, 154, 573, 152, 153, 575, 0, 583, 582, + 915, 0, 1002, 0, 0, 988, 0, 992, 577, 586, + 1017, 0, 1013, 932, 0, 0, 1028, 0, 361, 362, + 1026, 0, 0, 747, 748, 0, 0, 0, 725, 724, + 731, 0, 476, 0, 0, 458, 822, 808, 809, 807, + 818, 729, 0, 369, 717, 0, 0, 0, 605, 601, + 983, 982, 861, 482, 474, 0, 0, 480, 471, 472, + 588, 527, 525, 0, 524, 517, 518, 0, 515, 516, + 0, 510, 467, 468, 483, 484, 0, 881, 0, 0, + 641, 642, 0, 0, 0, 994, 633, 700, 0, 1056, + 1030, 0, 1057, 0, 1040, 1042, 1053, 0, 1068, 0, + 1034, 1082, 0, 1115, 195, 1110, 0, 805, 804, 0, + 803, 0, 384, 0, 62, 59, 0, 0, 0, 0, + 0, 0, 391, 0, 760, 0, 0, 88, 87, 0, + 532, 0, 0, 0, 0, 0, 188, 596, 0, 0, + 0, 0, 0, 948, 940, 938, 0, 959, 0, 0, + 1008, 559, 556, 0, 501, 0, 0, 0, 1093, 1094, + 488, 494, 0, 498, 0, 0, 0, 0, 0, 0, + 913, 0, 998, 0, 995, 989, 1016, 0, 931, 364, + 365, 1029, 1027, 0, 592, 0, 733, 723, 463, 462, + 372, 716, 715, 735, 473, 526, 0, 0, 520, 0, + 509, 508, 507, 0, 897, 880, 0, 0, 0, 886, + 0, 0, 0, 651, 0, 0, 654, 0, 660, 0, + 658, 701, 702, 699, 0, 1032, 0, 1061, 0, 0, + 1076, 1077, 1070, 0, 19, 1114, 387, 386, 0, 0, + 68, 61, 0, 70, 31, 24, 0, 0, 337, 0, + 240, 0, 115, 0, 84, 85, 891, 127, 128, 0, + 0, 0, 894, 203, 204, 0, 0, 0, 0, 176, + 185, 177, 179, 935, 0, 0, 0, 0, 0, 957, + 0, 0, 502, 503, 496, 499, 495, 0, 489, 493, + 0, 564, 0, 530, 540, 487, 576, 574, 0, 0, + 0, 1019, 0, 0, 746, 738, 0, 0, 521, 0, + 519, 0, 0, 878, 877, 874, 887, 645, 0, 650, + 0, 0, 655, 649, 0, 1031, 0, 0, 0, 1045, + 0, 1043, 1054, 0, 1083, 1102, 0, 81, 0, 0, + 75, 76, 79, 80, 0, 354, 343, 342, 0, 761, + 236, 110, 0, 876, 895, 189, 0, 201, 0, 0, + 0, 933, 1021, 0, 0, 0, 0, 939, 0, 960, + 911, 0, 545, 542, 920, 0, 926, 0, 0, 918, + 0, 922, 0, 996, 1018, 1014, 0, 464, 736, 523, + 0, 0, 653, 652, 661, 659, 1033, 1058, 0, 1044, + 0, 0, 1072, 0, 82, 73, 0, 0, 0, 338, + 0, 0, 0, 0, 0, 190, 0, 180, 178, 1011, + 949, 943, 941, 0, 500, 0, 914, 919, 0, 923, + 1003, 0, 0, 739, 0, 889, 0, 1062, 1079, 1080, + 1073, 60, 0, 77, 78, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 787, 0, 752, 896, 187, 0, + 200, 0, 0, 961, 925, 924, 1000, 0, 997, 1015, + 898, 0, 0, 0, 83, 0, 0, 355, 0, 0, + 353, 339, 0, 347, 0, 409, 0, 407, 0, 0, + 762, 0, 792, 237, 0, 191, 1012, 945, 942, 0, + 0, 954, 810, 812, 999, 1059, 0, 1074, 0, 0, + 0, 335, 0, 0, 753, 789, 0, 758, 0, 0, + 793, 0, 111, 0, 0, 0, 1063, 29, 28, 25, + 356, 352, 0, 0, 348, 408, 0, 795, 0, 0, + 0, 0, 944, 0, 0, 0, 0, 0, 34, 340, + 0, 800, 0, 801, 798, 0, 796, 106, 107, 0, + 103, 0, 0, 91, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 104, 105, 155, 0, 0, 253, + 245, 246, 247, 248, 249, 250, 251, 252, 0, 0, + 243, 112, 811, 0, 1060, 0, 357, 351, 759, 0, + 0, 0, 0, 763, 92, 0, 295, 290, 294, 0, + 238, 244, 0, 1066, 1064, 799, 797, 0, 0, 0, + 0, 0, 0, 0, 0, 304, 0, 0, 254, 0, + 0, 260, 0, 170, 169, 156, 166, 167, 168, 0, + 0, 0, 108, 0, 0, 289, 0, 0, 288, 0, + 160, 0, 0, 378, 336, 0, 376, 0, 0, 0, + 0, 0, 0, 0, 0, 764, 0, 239, 113, 118, + 116, 311, 0, 375, 0, 0, 0, 0, 131, 0, + 0, 0, 0, 0, 0, 165, 157, 0, 0, 0, + 218, 0, 379, 0, 255, 0, 0, 0, 0, 308, + 0, 286, 133, 0, 284, 0, 0, 0, 135, 0, + 380, 0, 0, 207, 212, 0, 0, 0, 377, 258, + 171, 114, 126, 124, 0, 0, 313, 0, 0, 0, + 0, 0, 161, 0, 292, 0, 0, 0, 0, 139, + 0, 0, 0, 0, 381, 382, 0, 0, 0, 0, + 0, 121, 328, 0, 309, 0, 0, 322, 0, 0, + 0, 317, 0, 151, 0, 0, 0, 0, 146, 0, + 0, 305, 0, 136, 0, 130, 140, 158, 164, 227, + 0, 208, 0, 0, 219, 0, 125, 0, 117, 122, + 0, 0, 0, 324, 0, 325, 314, 0, 0, 307, + 318, 287, 0, 0, 132, 147, 285, 0, 303, 0, + 293, 297, 142, 0, 0, 0, 224, 226, 0, 259, + 123, 329, 331, 310, 0, 0, 323, 320, 150, 148, + 162, 302, 0, 0, 0, 159, 228, 230, 209, 0, + 222, 220, 0, 0, 322, 0, 298, 300, 143, 0, + 0, 0, 0, 333, 334, 330, 332, 321, 163, 0, + 0, 234, 233, 232, 229, 231, 214, 210, 221, 0, + 0, 0, 299, 301, 216, 217, 0, 215, }; protected static readonly short [] yyDgoto = { 7, - 8, 50, 9, 51, 10, 11, 52, 237, 771, 772, - 12, 13, 53, 22, 23, 331, 240, 756, 939, 1133, - 1257, 1310, 1634, 936, 241, 242, 243, 244, 245, 246, - 247, 248, 749, 474, 750, 751, 1040, 752, 753, 1044, - 937, 1128, 1129, 1130, 273, 641, 1225, 111, 948, 813, - 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, - 1352, 1353, 1354, 1355, 1356, 593, 1382, 860, 493, 760, - 1437, 1054, 1238, 1195, 1236, 1271, 1322, 1393, 1478, 1266, - 1505, 1479, 1530, 1531, 1532, 1056, 1528, 1057, 822, 940, - 1490, 1464, 1518, 548, 1511, 1484, 1547, 1020, 1516, 1519, - 1520, 1615, 1548, 1549, 1545, 1357, 1416, 1386, 1438, 773, - 1492, 1594, 1461, 1551, 1626, 494, 1417, 1418, 274, 1447, - 774, 775, 776, 777, 778, 731, 611, 1242, 732, 733, - 954, 1440, 1469, 1562, 1523, 1596, 1648, 1632, 1470, 1657, - 1652, 1441, 1496, 1622, 1599, 1563, 1564, 1645, 1630, 1631, - 1052, 1194, 1302, 1369, 1421, 1370, 1371, 1409, 1444, 1410, - 334, 227, 1527, 1412, 1512, 1509, 1358, 1388, 1433, 1591, - 1553, 1285, 1592, 642, 1640, 1641, 1432, 1508, 1481, 1540, - 1535, 1506, 1572, 1577, 1538, 1541, 1542, 1625, 1578, 1536, - 1537, 1636, 1623, 1624, 1049, 1137, 1262, 1230, 1293, 1263, - 1264, 1313, 1191, 1290, 1327, 388, 197, 113, 377, 378, - 114, 604, 470, 230, 1456, 740, 741, 928, 941, 335, - 336, 435, 327, 337, 311, 1267, 1268, 46, 118, 312, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 8, 50, 9, 51, 10, 11, 52, 238, 785, 786, + 12, 13, 53, 22, 23, 199, 332, 241, 770, 961, + 1185, 1317, 1370, 1694, 958, 242, 243, 244, 245, 246, + 247, 248, 249, 763, 479, 764, 765, 1080, 766, 767, + 1084, 959, 1180, 1181, 1182, 274, 652, 1283, 113, 970, + 1095, 827, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, + 1410, 1411, 1412, 1413, 1414, 1415, 1416, 604, 1442, 880, + 498, 774, 1497, 1094, 1296, 1253, 1294, 1331, 1382, 1453, + 1538, 1326, 1565, 1539, 1590, 1591, 1592, 1097, 1588, 1098, + 836, 962, 1550, 1524, 1578, 553, 1571, 1544, 1607, 1045, + 1576, 1579, 1580, 1675, 1608, 1609, 1605, 1417, 1476, 1446, + 1498, 787, 1552, 1654, 1521, 1611, 1686, 499, 1477, 1478, + 275, 1507, 788, 789, 790, 791, 792, 745, 622, 1300, + 746, 747, 976, 1500, 1529, 1622, 1583, 1656, 1708, 1692, + 1530, 1717, 1712, 1501, 1556, 1682, 1659, 1623, 1624, 1705, + 1690, 1691, 1092, 1252, 1362, 1429, 1481, 1430, 1431, 1469, + 1504, 1470, 335, 228, 1587, 1472, 1572, 1569, 1418, 1448, + 1493, 1651, 1613, 1345, 1652, 653, 1700, 1701, 1492, 1568, + 1541, 1600, 1595, 1566, 1632, 1637, 1598, 1601, 1602, 1685, + 1638, 1596, 1597, 1696, 1683, 1684, 1089, 1189, 1322, 1288, + 1353, 1323, 1324, 1373, 1249, 1350, 1387, 395, 336, 115, + 384, 385, 116, 615, 475, 231, 1516, 754, 755, 950, + 963, 117, 340, 442, 328, 341, 312, 1327, 1328, 46, + 120, 313, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 258, 891, 818, 1094, 1083, 806, 979, 807, 808, - 1084, 141, 202, 814, 644, 645, 646, 885, 503, 504, - 304, 1092, 816, 436, 306, 532, 533, 534, 535, 538, - 824, 566, 270, 509, 849, 271, 508, 142, 143, 144, - 145, 673, 899, 674, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 614, 615, 616, 854, 855, - 157, 601, 589, 851, 379, 1106, 585, 1175, 158, 523, - 1233, 1234, 1237, 1317, 1050, 1193, 1300, 1413, 495, 1272, - 1273, 1336, 1337, 929, 354, 1305, 0, 0, 594, 595, - 275, 276, 277, 161, 162, 163, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 175, 290, - 621, 176, 177, 328, 905, 708, 1023, 1112, 951, 767, - 1060, 1021, 1024, 1153, 1025, 1061, 1062, 291, 178, 179, - 180, 1166, 1098, 1167, 1168, 1169, 1170, 181, 182, 183, - 184, 784, 516, 785, 1156, 1078, 1157, 1279, 1245, 1280, - 786, 1077, 787, 1282, 1206, 185, 186, 187, 188, 189, - 190, 313, 560, 561, 831, 1214, 324, 1076, 961, 1244, - 1103, 996, 1215, 191, 448, 192, 449, 1026, 1115, 450, - 451, 724, 715, 716, 1120, 1030, 452, 453, 454, 455, - 456, 1031, 710, 1028, 1219, 1306, 1375, 1117, 1253, 1326, - 915, 718, 916, 1184, 1122, 1185, 1254, 1035, 17, 19, - 47, 48, 229, 734, 932, 468, 735, 736, + 140, 141, 142, 143, 359, 360, 875, 1147, 259, 915, + 832, 1135, 1124, 820, 1001, 821, 822, 1125, 144, 202, + 828, 655, 656, 657, 906, 907, 145, 508, 509, 305, + 1133, 830, 443, 307, 537, 538, 539, 540, 543, 838, + 571, 271, 514, 866, 272, 513, 146, 147, 148, 149, + 1056, 927, 1057, 690, 691, 1058, 1053, 1054, 1059, 1060, + 1061, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 625, 626, 627, 871, 872, 161, 612, 596, + 868, 386, 1148, 592, 1227, 162, 528, 1291, 1292, 1295, + 1377, 1090, 1251, 1360, 1473, 500, 1332, 1333, 1396, 1397, + 951, 361, 1365, 0, 0, 605, 606, 276, 277, 278, + 165, 166, 167, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 179, 291, 632, 180, 329, + 920, 658, 1048, 1156, 973, 781, 1101, 1046, 1049, 1205, + 1050, 1102, 1103, 292, 181, 182, 183, 1218, 1139, 1219, + 1220, 1221, 1222, 184, 185, 186, 187, 798, 521, 799, + 1208, 1119, 1209, 1339, 1303, 1340, 800, 1118, 801, 1342, + 1264, 188, 189, 190, 191, 192, 193, 314, 565, 566, + 845, 1309, 1272, 1012, 325, 1117, 983, 1302, 1144, 1018, + 1273, 194, 455, 195, 456, 1065, 1167, 457, 458, 740, + 731, 732, 1172, 1069, 459, 460, 461, 462, 463, 1070, + 726, 1067, 1277, 1366, 1435, 1169, 1313, 1386, 939, 734, + 940, 1242, 1174, 1243, 1314, 1074, 17, 19, 47, 48, + 230, 748, 954, 473, 749, 750, }; - protected static readonly short [] yySindex = { -68, - 0, -187, 189, 161, 258,18441, 0, 251, 0, 0, - 258, 161, 0, 0, 303, 0, 8261, 258, 0, -151, - -258, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 448, 0, 0, 0, 5471, 0, 0, 0, 0, 0, - 0, 297, 0, 0, 426, 0, 0, 720, 0, 0, - 251, 495, 258, 0, 534, 0, 322, 590, -183,17987, - -27, 138, 512, 8419, 0, 138, 138, 138, -90, 138, - 138, 610, 0,10410, 138, 138, 0,10568, 0, 642, - 138, -181, 0, 138, 645, 138, 0,18473,18473, 666, - 138, 138, 97,10728, 0,17096, 0,11916,12048,12180, -12312,12444,12576,12708,12840, 0, 232, 0, 9503, 0, - 184, 0, 50, 0, 0, 0, 579, 500, -234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 853, 917, 209, 755, 636, 338, 671, 697, - 686, 694, 533, 713, 0, 0, 0, 0, 0, 0, - 3940, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50, 745, 197, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 377, 418, 495, 0, 517, -240, 0, 704, 0, 0, - 0, 0, 9503, 9503, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 297, 0, 0, 712, - 751, 0, -200, 0, 0, 0, 495,19024, 841, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 877, - 50,17233, 0, 0, 0, 0, 0,17096, -205, -141, - 901, 811, 488, 500, 50, 0, 0, 9503, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, - 275,17987, 0, 9503,17096, 816, 0, 0, 826,17096, -17096, 6467, 537, -93, 874, 9503, 0,10728, 232, 1010, - 897, 0, 913, 9503,17096, 0, 1022, 918, 690, 951, - 0, 0,17096, 642,16685, 0, 0, 645,17096, 577, - 634, 989, 50, 0, 0, 745, 0, -234, 1013, 50, -17096,17096,17096, 512, 0, 980, 0, 9503, 9503, 0, -11784, 50, 0, 8577, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1069, 0, 0, 0, 0,18291, 577, - 959, 958,17096, 0, 562, 0, 126, 0, 0, 316, - 259, 0, 0, 923,10860, 8893, 0, 0,17096,17096, -17096,17096,17096,17096,17096,17096,17096,17096,17096,12972, -13104,13236, 2103,15577,13368,13500,13632,13764,13896,14028, -14160,14292,14424,14556,14688,14820,14952,15084,15216,17644, -17096, 0, 0, 0, 0, 745, 0, 0, 0, 0, -18473,18473, 0, 0, 50, 0, 0, 0, 0, 552, - 981, 0, 0, 0, 0, 0, 0, 0, 495, 841, - 927, 943, 0, 562, 297, 297, 0, 486, 107, 0, - 297, 998, 0, -193,19024, 0, 0, 0, 0, -145, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255,19054, 0, 0, 0, 0, 962, 0, - 0, 1003, 788, 0, 1001, 0, 1011, 164, 642, 0, - 138, 0, 0, 0, 50,16685, -115, 0, 1021, 0, - 0, 0, 112, 168, 0, 811, 488, 0, 0, 1008, - 0, 1041, 0, 1037, 983, 0, 0, 805, 0, 9167, - 806,11018, 874,16548, 0, 9328, 0, 0, 0, 0, - 0, 0, 174, 192, 0, 0, 0, -224, 642, -147, - 0, 0, 645, 0, 0, 1042, 1044, 0, 195, 50, - 0, 205, 0, 0,17096, 1126, 0,17096, 1129, 1050, - 0, 1053, 1055, 0,18291, 0, 0, 0, 188, 962, - 0, -92, -272, 8577, 0, 0, 0, 0, 0, 0, - 188, 0, 0, -235, 0, 0, 0, 645, 0, 577, - 50, 9661, 0, 1056, 0, 1060,15348, 0, 1181, 1061, - 8577, 0, 0, 1014, 0, 962, 50,17233, 1015, 0, - 562, 962, 0, 116, 0,17096,17096, 1067, 1186, 0, - 0, 270, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,17769,17769, 0, 0, - -234, 0, 50, 745, 0, 917, 0, 917, 0,11652, - 209, 0, 209, 0, 755, 0, 755, 0, 755, 0, - 755, 0, 636, 0, 636, 0, 338, 0, 671, 0, - 697, 0, 686, 0, 694, 0, -57, -180, 0,11018, - 1151, 50, 1152, 50,11018,11018, 1066,17096, 0, 0, - 981, 0, 50, 0, 244, 562, 0, 0, 0, 0, - 9661, 486, 0, 1076, 1075, 0, 0, 707, 495, -8, - 0, 0, 0, 0, 0, 0, -185, 1077, 0, 1079, - 1081, 0, 0, 0, 0, 1083,10269, 1039, 0, 435, - 0, 0, 687, 0,17233, 0, 1082, 0, 0, 0, - 729, 141, 1086, 0, 1088, 1091, 1092, 0, 0,17096, - 0, 50, 0, 0, 818, 0, 1094, 0, 256, 0, - 0, 8419, 0, 8419, 9802, 0,15688, 0, 0, 0, - 9962,10094, 422,11018, 0, 7, 149, 0, 1031, 1046, - 0, 0, 0, 834, 0, 0, 1099, 1098, 0, 0, - 0, 0, 0, 1100, 0, 0, 0, 1106, 138, 4352, - 642, 0, 642, 0, 0, 0, 0, 8419, 0, 0, - 8419, 0,17096, 0,17096, 9503, 0, 0, 642, 1103, - 188, 0, 0, 0,17096, 0, 0, 0, 0, 0, - 0, 0, 9503, 0, 0, 50,18291, 1135, 0, 0, - 0, 0, 0, 0, 0, 962, 842, 0, 0, 0, - 0, 0, 0, 0, 0, 0,16411, 0, 0, 0, - 0, 0, 9486, 0, 0, 0, 0, 0, 0, 0, - 0,10252, 0, 9644, 1108, 0, 0, 1190, 0, 1191, - 0, 0, 0, 932, 0, 1111, 0, 0, 0, 0, - 0, 0, 0, 0, 486, 0, 0, 1068, 0, 107, - 0, 486, 0, 0, 927, 1119, 1122, 1072, 1130, 1039, - 0, 1121, 0, 1245, 1246, 0, 0,11018, 0,16822, - 1128, 729, 9661, 9503, 0, 0, 371, 1249, 1250, 219, - 1127, 0, 0, 0,17096, 0,17096, 1230, 0, 0, - 0,16959, 0, 342,16959, 848, 0, 0, 0, 0, - 9030, 0, 1256, 745,11018, 1145, 9802, 1146, 0,17096, - 0, 50, 0, 0, 0, -87, 0, 0, 0, 1141, - 0, 1174, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 706, 0, 0, 0, 0, 0, 0, 9503, 0, - 0, 50, -242, 1108, 0,11018, 0,11018, 0, 191, -11018, 0, 0, 0, 503, 0, 0, 0, 1150, 927, - 0, 0,11176, 0, 0, 0, 1155, 4512, 0, 1039, - 0, 1039, 0, 1039, 0, 0, 0, 0, 50, 1156, - 1128, 0, 0, 0, -109, -125, 1154, 1157, 0, 0, - 0, 0, 0, 1159, 9802, 1108, -180,17096, 0, 1166, - 8419, 0, 0, 0, 0, 0, 1158, 0, 0, 1170, - 0, 874, 0, 0, 0, 0, 0, -201, 1169, 1171, - 0, 1108, 1175, 0, 0, 188, 0, 1123, 1167, 0, - 0, 0, 0, 0,11018, 1204,11018, 0,11018, 0, - 0,17096, 0, 0, 1081, 0, 515, 739, 0, 0, - 0, 0, 161, 0, 0, 0, 1185, 0, 0, 0, - 1172, 0, 0, 0, 682, 0, 1176, 1300, 1303, 0, - 0, 1108, 1193, 1108, 1195, 0, 1187, 0, 0,16959, - 0, 0, 0,17096, 0, 1194, -209, 0, 8101, 0, - 0, 1313, 0, 0, 188, 0,17096, 9644, 0, 0, - 1223, 0, 964, 1197, 0, 1202, 0, 0,11176, 258, - 164, 0, 852, 1199, 1205,16822, 1207, 0,17096, 0, - 0, 0, 0, 0, 0, 8419, 0, 77, 0, 0, - 8577, 0, 0, 1290, 8419, 0, 1213, 0,11018, 0, - 0, 0, 0, 0,17096, 0, 0, 495, 1214, 495, - 164, 9503, 1199, 1253, 0, 1253, 0, 1199, 0, 0, - 0,17096, 0, 8419,11334, 0, 0, 0, 906, 0, - 0, 1240,11018,17096, 0, 495, 1220, 0, 1180, 991, - 0, 0, 1225, 0, 1222, 0, 165, 0, 1229, 1183, - 0, 1253, 0, 0, 1253, 0, 0, 0, 0, 1231, - 1094, 0, 0, 0, 0, 0, 1255, 0, 68, 1253, - 1349, 0, 1238, 495, 0, 0, 9503, 0, 106, 1241, - 0, 1242, 0, 8419, 8577,11018, 0, 0, 0, 0, - 0, 0, 1226, 1235, 0, 0,16548, 0, 2289, 66, - 495, 1247, 0, 1248, 1260,11018, 1251,17096, 0, 0, - 1254, 0, 1257, 0, 0, 1243, 0, 0, 0,19054, - 0, 1261, 66, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 714,19054, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1262, 495, - 0, 0, 0, 50, 0, 1260, 0, 0, 0, 1259, - 2289, 8577,18159, 0, 0, 595, 0, 0, 0, 5312, - 0, 0, 66, 0, 0, 0, 0, -272, 9503, 9503, - 176, 9503, 477, 645, 1282, 0, 577, 1663, 0, 1317, - 0, 0, 1235, 0, 0, 0, 0, 0, 0, 4029, - 1235, 1264, 0, -123, -120, 0, 9503, -118, 0, 9503, - 0, 1215, 1265, 0, 0, 12, 0, 143, 4675, 0, - 1266, 1219, 153, 595, 5471, 0,17096, 0, 0, 0, - 0, 0, 12, 0, 1271, 1221, 1269, 1267, 0, 1270, - 1224, 1275, 164, 1272, 1274, 0, 0, 1280, 1281, 1310, - 0, 962, 0, 965, 0, 1296, 1292, 1235, -62, 0, - 1288, 0, 0, 1301, 0, 1304, 1299, 1302, 0, 1306, - 0, 164, 164, 0, 0, 164, 1305, 1309, 0, 0, - 0, 0, 0, 0, 1314, 150, 0, 1316, 164, 1421, - 1318, 164, 0, 501, 0, 9802, 1273, 1308, 1306, 0, - 1321, 1322, 152, 1325, 0, 0, 164,16822, 1278, 1323, - 1314, 0, 0,19054, 0, 495, 495, 0, 1279, 1324, - 1316, 0, 1326, 0,17096, 1284, 1327, 1318, 0, 1332, - 164, 0, 114, 0, 1328, 0, 0, 0, 0, 0, -19054, 0, 152, 152, 0, 1333, 0, -62, 0, 0, - 409, 1338,19054, 0,19054, 0, 0, 9802, 1329, 0, - 0, 0, 1337, 1301, 0, 0, 0, 1336, 0, 208, - 0, 0, 0, 1253, 1017, 1343, 0, 0, 538, 0, - 0, 0, 0, 0, 1398, 1451, 0, 0, 0, 0, - 0, 0, 1344, 1345, 9802, 0, 0, 0, 0, 152, - 0, 0, 580, 580, 0, 1253, 0, 0, 0, -143, - -143, 1340, 1354, 0, 0, 0, 0, 0, 0,16548, -16548, 0, 0, 0, 0, 0, 0, 0, 0, 1360, - 1361,16822, 0, 0, 0, 0, 1358, 0, + protected static readonly short [] yySindex = { 226, + 0, -164, 156, -25, 193,19811, 0, 172, 0, 0, + 193, -25, 0, 0, 174, 0, 8919, 193, 0, -158, + 69, 0, 0, 0, 0, 0, 0, 0, 380, 0, + 390, 0, 0, 0,12330, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 634, 0, 0, 665, 0, 0, + 172, 433, 193, 0, 339, 0, 378, 441, -171,19227, + -151, 336, 565, 9080, 0, 336, 336, 336, 67, 336, + 336, 855, 0,11110, 336, 336, 0,11271, 0, 598, + 336, -161, 0, 336, 597, 336, 0, 9580, 9580, 629, + 336, 336, 70,11434,18112, 0, 0,18112, 0,12646, +12781,12916,13051,13186,13321,13456,13591, 0, 276, 0, +10346, 0, 52, 0, -38, 0, 0, 0, 486, 868, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -38, 0, 1172, 890, 116, 392, + 643, 723, 636, 675, 692, 688, 114, 712, 0, 0, + 0, 0, 0, 0, 4190, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, + -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 396, 465, 433, 0, 0, 724, 0, + 0, 0,10346,10346, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, + 736, 743, 0, -232, 0, 0, 0, 433,13222, 847, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 914, -38,18252, 0, 0, 0, 0, 0,18112, -144, + -142, 901, 809, -274, 868, -38, 0, 0,10346, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 330,19227, 0,10346,18112, 811, 0, 0, 887, +18112,18112, 7036, 653, 299, 877,10346, 0,11434, 276, + 1031, 917, 0, 925,10346,18112, 0, 1062, 945, 603, + 1181, 0, 0,18112, 598,17552, 0, 0, 597,18112, + 452, 575, 1038, -38, 0, 0, 920, 0, 0, 762, + 0, 31, 1051, -38,18112,18112,18112, 565, 0, 1015, + 0,10346,10346, 0,12511, -38, 0, 878, 896, 0, + 9241, 104, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1587, 0, 0, 0, 0,19691, 452, 976, 993,18112, + 0, -9, 0, 202, 0, 0, 150, 255, 0, 0, + 946,11569, 9563, 0, 0, 0,18112,18112,18112,18112, +18112,18112,18112,18112,18112,18112,18112,13726,13861,13996, + 1795,16291,14131,14266,14401,14536,14671,14806,14941,15076, +15211,15346,15481,15616,15751,15886,16021,18672,18112, 0, + 0, 0, 762, 0, 0, 0, 0, 9580, 9580, 0, + 0, -38, 0, 0, 0, 0, 564, 1021, 0, 0, + 0, 0, 0, 0, 0, 433, 847, 548, 473, 331, + 331, 0, 682, -149, 0, 331, 1016, 0, -167,13222, + 0, 0, 0, 0, -152, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 348,13357, 0, + 0, 0, 0, 999, 0, 0, 1003, 706, 0, 1026, + 0, 1036, 241, 598, 0, 336, 0, 0, 0, -38, +17552, -147, 0, 1040, 0, 0, 0, -168, 94, 0, + 809, -274, 0, 0, 1043, 0, 1047, 0, 1045, 992, + 0, 0, 734, 0, 9843, 739,11730, 877,17412, 0, +10007, 0, 0, 0, 0, 0, 0, 99, 107, 0, + 0, 0, 347, 598, 713, 0, 0, 597, 0, 0, + 1053, 1056, 0, 108, -38, 0, 119, 1011, 0, 0, +18112, 1141, -9, 0,18112, 1144, 1061, 0, 1064, 1066, + 0,19691, 0, 0, 0, 98, 999,18112, 0,18112, + 0, 0, -197, 138, 9241, 0, 0, 0, 0, 0, + 0, 98, 0, 0, 155, 0, 0, 0, 597, 0, + 452, -38,10966, 0, 1067, 0, 1071,16156, 0, 1194, + 1073, 9241, 0, 0, 1027, 0, 999, -38,18252, 1029, + 0, -9, 999, 0, 127, 0,17692,17692, 1087, 1210, + 0, 0, 139, 76, 0, 0, 0, -172, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,18800,18800, + 0,10346, 646, 0, 0, 0, 0, -38, 0, 0, + 0, 0, 890, 0, 890, 0,12376, 116, 0, 116, + 0, 392, 0, 392, 0, 392, 0, 392, 0, 643, + 0, 643, 0, 723, 0, 636, 0, 675, 0, 692, + 0, 688, 0, -200, 0,11730, 1173, -38, 1174, -38, +11730,11730, 1085,18112, 0, 0, 1021, 0, -38, 0, + 1049, 0, 0, 0,10966, 682, 0, 1096, 1097, 0, + 0, 574, 433, 201, 0, 0, 0, 0, 0, 0, + -117, 1100, 0, 1099, 1101, 0, 0, 0, 0, 1105, +11127, 1065, 0, 240, 0, 0, 614, 0,18252, 0, + 1098, 0, 0, 0, 726, 39, 1108, 0, 1110, 1111, + 1113, 0, 0,18112, 0, -38, 0, 0, 751, 0, + 1114, 0, 560, 0, 0, 9080, 0, 9080,10490, 0, +16510, 0, 0, 0,10653,10788, 401,11730, 0, 154, + 81, 0, 1063, 1059, 0, 0, 0, 814, 0, 0, + 1122, 1124, 0, 0, 0, 0, 0, 1127, 0, 0, + 0, 1129, 0, 2102, 598, 0, 598, 0, 0, 0, + 0, 9080, 0, 0, 9080, -9, 0,18112, 0, 0, + 0,18112,10346, 0, 0, 598, 1131, 98, 0, 0, + 0,18112, 0, 1130, 1092, 0, 0, 0, 0, 0, + 0, 0,10346, 0, 0, -38,19691, 1165, 0, 0, + 0, 0, 0, 0, 0, 999, 820, 0, 0, 0, + 0, 0, 0,17692, 0, 0, 0, -38, 0, 0, +17272, 0, 0, 0, 0, 0,10168, 0,10329, 1136, + 0, 0, 1140, -38,18928, 0, 0, 0,10949, 0, + 0, 1223, 0, 1226, 0, 0, 0, 959, 0, 1143, + 0, 0, 856, 0, 0, 0, 682, 0, 0, 1104, + 0, -149, 0, 682, 0, 0, 1049, 1148, 1154, 1109, + 1162, 1065, 0, 1155, 0, 1279, 1281, 0, 0,11730, + 0,17832, 1160, 726,10966,10346, 0, 0, 91, 1284, + 1285, 131, 1157, 0, 0, 0,18112, 0,18112, 1263, + 0, 0, 0,17972, 0, 552,17972, 830, 0, 0, + 0, 0, 9703, 0, 1288, 762,11730, 1175,10490, 1176, + 0, 336, 0, -38, 0, 0, 0, -170, 0, 0, + 0, 0, 0, 1169, 0, 1208, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1177, 1178, 0, 899, + 0, 0, 0,10346, 0, 0, -38, 539, 1136, 0, +18800, 1260, 680, 0, 449, -38, 0, 1184, 0, 1187, + 0, 0, 0, 0,11730, 0,11730, 0, -165,11730, + 0, 0, 0, 314, 0, 0, 0, 0, 1188, 1049, + 0, 0,11891, 0, 0, 0, 1191, 4772, 0, 1065, + 0, 1065, 0, 1065, 0, 0, 0, 0, 0, -38, + 1192, 1160, 0, 0, 0, -129, -132, 1189, 1190, 0, + 0, 0, 0, 0, 1193,10490, 1136, -172,18112, 0, + 1199, 9080, 0, 0, 0, 0, 0, 1206, 0, 0, + 1218, 0, 877, 0, 0, 0, 0, 0, -185,18112, + 1217, 0, 1136, 1219, 0, 0, 1179, 98, 0,18112, + 0, 1167, 1213, 0, 0, 0, 0, 0,19037, 0, + -38,19037, 0, 0,18928, 0,11730, 1252,11730, 0, +11730, 0, 0,18112, 0, 0, 1101, 0, 561, 910, + 0, 0, 0, 0, -25, 0, 0, 0, 1231, 0, + 0, 0, 1221, 0, 0, 0, 623, 0, 1222, 1352, + 1353, 0, 0, 1136, 1234, 1136, 1235, 0, 1232, 0, + 0,17972, 0, 0, 0,18112, 0, 1243, -188, 0, + 8756, 0, 1240, 0, 0, 0, 98, 0, 0, 0, +18112,10329, 0, 0, 0, 0, 0, 0, 1271, 0, + 1025, 1241, 0, 1246, 0, 0,11891, 193, 241, 0, + 789, 1247, 1250,17832, 1248, 0,18112, 0, 0, 0, + 0, 0, 0, 9080, 0, -174, 0, 0, 9241, 0, + 0, 102, 9080, 0, 1254, 0,11730, 0, 0, 0, + 0, 0,18112, 0, 0, 433, 1253, 433, 241,10346, + 1247, 1291, 0, 1291, 0, 1247, 0, 0, 0,18112, + 0, 9080,12052, 0, 0, 0, 0, 919, 0, 0, + 0, 1283,11730,18112, 0, 433, 1262, 0, 1214, 1019, + 0, 0, 1257, 0, 1261, 0, 83, 0, 1264, 1216, + 0, 1291, 0, 0, 1291, 0, 0, 0, 0, 1266, + 1114, 0, 0, 0, 0, 0, 1292, 0, -133, 1291, + 1388, 0, 1273, 433, 0, 0,10346, 0, 58, 1275, + 0, 1276, 0, 9080, 9241,11730, 0, 0, 0, 0, + 0, 0, 1265, 1268, 0, 0,17412, 0,19879, 149, + 433, 1278, 0, 1280, 1295,11730, 1282,18112, 0, 0, + 1287, 0, 1286, 0, 0, 1289, 0, 0, 0,13357, + 0, 1293, 149, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -239,13357, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1296, 433, + 0, 0, 0, -38, 0, 1295, 0, 0, 0, 1294, +19879, 9241,19470, 0, 0, 591, 0, 0, 0,19538, + 0, 0, 149, 0, 0, 0, 0, 138,10346,10346, + 268,10346, 482, 597, 1322, 0, 452,17193, 0, 1355, + 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1943, + 1268, 1297, 0, -130, -128, 0,10346, -111, 0,10346, + 0, 1242, 1300, 0, 0, -276, 0, -181, 4941, 0, + 1298, 1255, 3, 591,12330, 0,18112, 0, 0, 0, + 0, 0, -276, 0, 1301, 1256, 1304, 1302, 0, 1310, + 1267, 1311, 241, 1303, 1299, 0, 0, 1312, 1319, 1349, + 0, 999, 0, 975, 0, 1318, 1314, 1268, -145, 0, + 1313, 0, 0, 1323, 0, 1324, 1321, 1326, 0, 1325, + 0, 241, 241, 0, 0, 241, 1327, 1328, 0, 0, + 0, 0, 0, 0, 1336, 89, 0, 1339, 241, 1462, + 1343, 241, 0, 345, 0,10490, 1305, 1344, 1325, 0, + 1347, 1354, 112, 1357, 0, 0, 241,17832, 1306, 1356, + 1336, 0, 0,13357, 0, 433, 433, 0, 1307, 1358, + 1339, 0, 1363, 0,18112, 1329, 1360, 1343, 0, 1365, + 241, 0, 64, 0, 1348, 0, 0, 0, 0, 0, +13357, 0, 112, 112, 0, 1367, 0, -145, 0, 0, + -153, 1362,13357, 0,13357, 0, 0,10490, 1359, 0, + 0, 0, 1371, 1323, 0, 0, 0, 1376, 0, 282, + 0, 0, 0, 1291, 1028, 1375, 0, 0, 360, 0, + 0, 0, 0, 0, 1417, 1490, 0, 0, 0, 0, + 0, 0, 1381, 1382,10490, 0, 0, 0, 0, 112, + 0, 0, 359, 359, 0, 1291, 0, 0, 0, 97, + 97, 1373, 1391, 0, 0, 0, 0, 0, 0,17412, +17412, 0, 0, 0, 0, 0, 0, 0, 0, 1384, + 1389,17832, 0, 0, 0, 0, 1390, 0, }; - protected static readonly short [] yyRindex = { 1936, - 0, 0, 8735, 1936, 0, 0, 0, 1736, 0, 0, - 3522, 1489, 0, 0, 0, 0, 0, 3522, 0, 0, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, + protected static readonly short [] yyRindex = { 1465, + 0, 0, 9402, 1465, 0, 0, 0, 1764, 0, 0, + 3907, 2165, 0, 0, 0, 0, 0, 3907, 0, 1346, + 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1769, 0, 0, 1769, 0, 0, 1769, 0, 0, + 1764, 1666, 2625, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, + 0,11747, 0, 1393, 0, 0, 0, 1393, 0, 0, + 0, 0, 0, 0, 3589, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5812, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6345, 5749, + 4348, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6453, 6633, 7038, 7317, + 7813, 8029, 8173, 8317, 8461, 5037, 5363, 3547, 0, 0, + 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1737, 0, 0, 1737, 0, 0, 1737, 0, 0, - 1736, 3602, 2027, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1371, 0, 0, 0, 0, 0, 0, 0, - 0,10427, 0, 1363, 0, 0, 0, 1363, 0, 0, - 0, 0, 0, 0, 3192, 0, 0, 0, 0, 0, - 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5375, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5788, 5311, 5699, 0, + 0, 0, 0, 0, 0, 2233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5893, 6070, 4119, 6623, 7048, 7255, 7393, 7531, - 7669, 7807, 1311, 5470, 0, 0, 0, 0, 0, 0, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1769, 0, 0, + 182, 0, 0, 0, 0, 0, 0, 3954, 355, 4001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3649, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1737, 0, 0, 307, - 0, 0, 0, 0, 0, 0, 3712, 432, 3755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4351, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1406, 0, 0, 0, 0, 0, 0, 4771, + 1399, 0, 0, 0, 0, 0, 0, 1399, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3031, 0, + 601, 3181, 0, 0, 0, 0, 0, 0, 0, 3331, + 0, 3181, 0, 0, 0, 0, 0, 1400, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, + 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1405, 3439, 0, 0, 1393, + 0, 4608, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1373, 0, 0, 0, 0, 0, 0, 4351, 1366, - 0, 0, 0, 0, 0, 0, 1366, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2148, 0, 403, - 2851, 0, 0, 0, 0, 2982, 0, 2851, 0, 0, - 0, 0, 0, 1371, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1372, 3087, - 0, 0, 1363, 0, 4351, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2384, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1852, 0, 0, 0, 0, 0, 0, 0, 3798, 3861, - 0, 0, 0, 1531, 1737, 1737, 0, 8910, -206, 0, - 1737, 1744, 0, 0, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 479,17919, 0, 0, 0, 0, 4351, 0, - 0, 0, 0, 0, 0, 0, 0,18191, 0, 0, - 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 233, 1047, 0, 0, 230, - 1928, 0, 0, 1378, 513, 0, 0, 0, 0, 215, - 0, 0, 4831, 1376, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1384, 0, 2553, - 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1372, 0, 0, 0,17370, 4351, - 0, 7940, 0, 225, 0, 0, 0, 0, 0, 0, -17370, 0, 0, 0, 0, 0, 0, 60, 0, 703, - 0, 0, 0, 1381, 0, 0, 0, 0, 1366, 0, - 0, 0, 0, 4191, 0, 4351, 0, 0, 4030, 0, - 4351, 4991, 0, 0, 0, 0, 0, -202, 0, 0, - 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5535, 5640, 6142, 5965, 0, 6247, 0, 6319, 0, 0, - 6469, 0, 6554, 0, 6692, 0, 6761, 0, 6830, 0, - 6899, 0, 7117, 0, 7186, 0, 7324, 0, 7462, 0, - 7600, 0, 7738, 0, 7876, 0, 0, 749, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1852, 0, 0, 0, 0, 1531, 0, 0, 0, 0, - 0,11035, 0, 0, 817, 0, 0, 1339,15851, 0, - 0, 0, 0, 0, 0, 0, 781, 774, 0, 0, - 1385, 0, 0, 0, 0, 1820, 0, 0, 0, 0, - 0, 0,11492, 0, 0, 0, 845, 0, 0, 0, -11193,18364, 0, 0, 881, 920, 937, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 870, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1386, 0, 0, 0, - 0, 0, 6961, 0, 0, 0, 261, 0, 117, 4511, - 0, 0, 0, 0, 0, 0, 0, 1387, 0, 0, - 0, 0, 0, 1388, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17370, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4351, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, - 0, 0, 0, -169, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0,11193, 0, 0, 0, 0, -206, - 0, 9345, 0, 0, 1391, 0, 873, 0, 0, 0, - 0, 1395, 0, 1346, 1348, 0, 0, 0, 0, 0, - 1382,11351, 0, 0, 0, 0,18396, 0, 0, 0, - 939, 0, 0, 0, 0, 0, 0, 2721, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4671, 0, 5151, 1399, 0, 0, 0, - 0, 1396, 0, 0, 0, 939, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 940, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1394, 0, 0, 0, 0, 0, 957, 960, 0, 0, - 0, 0, 0, 0, 0, 1401, 761, 1400, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4831, 0, 0, 0, 0, 0, 1403, 0, 0, - 0, 1401, 0, 0, 0,17370, 0, 752, 762, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1385, 0,15689, 0, 0, 0, - 0, 0,18521, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 793, 0, 798, 0, 0, 0, - 0, 1402, 0, 895, 1404, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, - 0, 202, 0, 0,17370, 0, 0, 0, 0, 0, - 0, 0, 113, 678, 0, 0, 0, 0, 0,18592, -18191, 0, 386, 511, 449, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -208, 0, 0, 1020, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,18748, 0, -253, -18191, 0, 522, 1410, 0, 1410, 0, 511, 0, 0, - 0, 0, 0, 0, 1406, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,18791, 0, 0, 0,16125, - 0, 0, 1411, 0, 0, 0, 364, 0, 532, 0, - 0, 606, 0, 0, 1410, 0, 0, 0, 0, 0, - 1409, 0, 0, 0, 0, 0, 0, 0, 3479, 1412, - 493, 0, 0, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1414, 0, 0, 0, 0, 0, - 0, 0, 0, 3363, 0, 0, 1376, 0, 0,15957, -16209, 0, 0, 0, 767, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 617, 0, 0, 0,18091, - 0, 0,16041, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5152, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,16293, - 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, - 0, 198, 479, 0, 0, 0, 0, 0, 0, 479, - 0, 0,15957, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4830, 507, 0,16335, 0, 0, 0, - 4990, 0, 3363, 0, 0, 0, 0, 0, 0, 0, - 3363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 257, 0, 584, 0, 647, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 824, 0, 692, 0, 0, 0, 0, 0, - 0, 0,18191, 947, 0, 0, 0, 0, 0, 0, - 0, 1390, 0, 438, 0, 0, 0, 3363, 0, 0, - 963, 0, 0, 0, 0, 0, 0, 0, 0, 1417, - 0,18191,18191, 0, 0,18259, 0, 0, 0, 0, - 0, 0, 0, 0, 1418,15719, 0, 1420,18191,17507, - 1425,18191, 0, 0, 0, 0, 0, 0, 1426, 0, - 0, 0,18984, 0, 0, 0,18191, 0, 0, 0, - 1427, 0, 0, 424, 0,18914,18954, 0, 0, 0, - 1428, 0, 0, 0, 0, 0, 0, 1430, 0, 0, -18191, 0, 716, 0, 968, 0, 0, 0, 0, 0, - 1029, 0,18834,18874, 0, 0, 0, 0, 0, 0, - 0, 0, 1469, 0, 1525, 0, 0, 0, 978, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,18984, - 0, 0,18634,18672, 0, 611, 0, 0, 0, 0, - 0,15498, 0, 0, 0, 0, 0, 0, 0, 1376, - 1376, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2296, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4570, 0, 0, + 0, 0, 0, 0, 0, 4048, 4111, 875, 0, 1769, + 1769, 0,10024, -204, 0, 1769, 1783, 0, 0, 317, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 516,19151, 0, + 0, 0, 0, 4608, 0, 0, 0, 0, 0, 0, + 0, 0,19578, 0, 0, 0, 0, 0, 0, 0, + 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 335, 951, 0, 0, 272, 1077, 0, 0, 1412, 716, + 0, 0, 0, 0, 303, 0, 0, 5260, 1413, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1419, 0, 2470, 0, 0, -263, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2881, 0, 0, 0, 0, 0, 0, 0, + 0, 1405, 0, 0, 0,18392, 4608, 0, 0, 0, + 0, 0, 8592, 0, 304, 0, 0, 0, 0, 0, + 0,18392, 0, 0, 0, 0, 0, 0, 225, 0, + 799, 0, 0, 0, 1415, 0, 0, 0, 0, 1399, + 0, 0, 0, 0, 4445, 0, 4608, 0, 0, 4281, + 0, 4608, 5423, 0, 0, 0, 0, 0, -189, 0, + 0, 0, 0, 190, 0, 0, 0, 684, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5909, 6018, 6127, 6236, 0, 6705, 0, 0, + 0, 0, 6813, 0, 6885, 0, 0, 7144, 0, 7216, + 0, 7389, 0, 7490, 0, 7562, 0, 7663, 0, 7885, + 0, 7957, 0, 8101, 0, 8245, 0, 8389, 0, 8533, + 0, 5200, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4570, 0, 0, 0, + 0, 0, 0, 0, 0,11908, 0, 0, 924, 0, + 0, 1370,16676, 0, 0, 0, 0, 0, 0, 0, + 770, -238, 0, 0, 1421, 0, 0, 0, 0, 1876, + 0, 0, 0, 0, 0, 0,12213, 0, 0, 0, + 921, 0, 0, 0,12069,19731, 0, 0, 932, 935, + 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1424, 0, 0, 0, 0, 0, 7722, 0, 0, 0, + 324, 0, -7, 4934, 0, 0, 0, 0, 0, 0, + 0, 1423, 0, 0, 0, 0, 0, 1430, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2881, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,18392, 0, 0, + 0, 0, 0, 1034, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4608, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, + 0, 0, 0, 0, 1428, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -169, 0, 592, + 0, 0, 0, 0, 0, 0,12069, 0, 0, 0, + 0, -204, 0,10185, 0, 0, 1434, 0, 864, 0, + 0, 0, 0, 1422, 0, 1387, 1392, 0, 0, 0, + 0, 0, 1073,19855, 0, 0, 0, 0,19771, 0, + 0, 0, 941, 0, 0, 0, 0, 0, 0, 2751, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5097, 0, 5586, 1438, 0, + 0, 0, 0, 1436, 0, 0, 0, 941, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, + 0, 0, 0, 0, 2949, 642, 0, 0, 0, 1437, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1439, 0, 0, 0, 0, 0, 964, 967, 0, + 0, 0, 0, 0, 0, 0, 1440, 793, 1441, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5260, 0, 0, 0, 0, 0, 1446, 0, + 0, 0, 1440, 0, 0, 0, 0,18392, 0, 0, + 0, 683, 715, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1421, 0,16511, 0, + 0, 0, 0, 0,19927, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 807, 0, 873, 0, + 0, 0, 0, 1444, 0, 870, 1442, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1452, 0, + 0, 0, 0, 0, 0, 0,18392, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -127, 733, 0, 0, 0, 0, 0,19974,19578, 0, + 361, 521, -219, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -194, 0, + 0, 1033, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,20021, 0, 169,19578, 0, + 530, 1454, 0, 1454, 0, 521, 0, 0, 0, 0, + 0, 0, 1450, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,20068, 0, 0, 0,16949, + 0, 0, 1456, 0, 0, 0, 610, 0, 579, 0, + 0, 596, 0, 0, 1454, 0, 0, 0, 0, 0, + 1458, 0, 0, 0, 0, 0, 0, 0, 3860, 1455, + -247, 0, 0, 319, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1460, 0, 0, 0, 0, 0, + 0, 0, 0, 3758, 0, 0, 1413, 0, 0,16785, +17031, 0, 0, 0, 790, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 583, 0, 0, 0,19334, + 0, 0,16867, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,19402, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,17113, + 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, + 0, 301, 516, 0, 0, 0, 0, 0, 0, 516, + 0, 0,16785, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5584, 526, 0,17155, 0, 0, 0, + 5746, 0, 3758, 0, 0, 0, 0, 0, 0, 0, + 3758, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 381, 0, 454, 0, 651, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 825, 0, 725, 0, 0, 0, 0, 0, + 0, 0,19578, 966, 0, 0, 0, 0, 0, 0, + 0, 1453, 0, 508, 0, 0, 0, 3758, 0, 0, + 979, 0, 0, 0, 0, 0, 0, 0, 0, 1459, + 0,19578,19578, 0, 0,19618, 0, 0, 0, 0, + 0, 0, 0, 0, 1461,13087, 0, 1464,19578,18532, + 1469,19578, 0, 0, 0, 0, 0, 0, 1470, 0, + 0, 0,20144, 0, 0, 0,19578, 0, 0, 0, + 1471, 0, 0, 113, 0,12817,12952, 0, 0, 0, + 1475, 0, 0, 0, 0, 0, 0, 1476, 0, 0, +19578, 0, -237, 0, 985, 0, 0, 0, 0, 0, + 1039, 0,19073,20106, 0, 0, 0, 0, 0, 0, + 0, 0, 1525, 0, 1579, 0, 0, 0, 994, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,20144, + 0, 0,12547,12682, 0, 604, 0, 0, 0, 0, + 0,16421, 0, 0, 0, 0, 0, 0, 0, 1413, + 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; protected static readonly short [] yyGindex = { 0, - 0, 1757, 0, 0, 0, -1, -16, -178, -44, -41, - 0, 1797, 1806, 103, 0, 6, 0, 0, 0, 0, - 0, 0,-1157, -774, -216, -708, 0, 0, 0, 0, - 0, -221, 0, 0, 0, 776, 0, 883, 0, 0, - 0, 0, 630, 632, -17, -227, 0, -47, 0, -112, - 430, 0, 487, -587, -577, -576, -541, -537, -525, -516, - -503, 0, 0,-1152, 0,-1187, 0, 434,-1258, 0, - 3, 0, 0, 0, 596,-1183, 0, 0, 0, -3, - 267, 0, 0, 0, 306,-1151, 0, -281, -301, -354, - 0, 0, 0, -985, 262, 0, 0, -529, 0, 0, - 320, 0, 0, 299, 0, 0, 401, 0, -630, -856, - 0, 0, 0, 0, 0, -404, 335,-1396, -10, 0, - 0, 0, 893, 898, 900, 1089, -572, 0, 0, -336, - 902, 436, 0, -905, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, - 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, - -315, 423, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 505, 0, -531, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 246, 0, 0, 331, 0, 0, 336, - 340, 266, 0, 0, 0, 0, 0, 0, 0, 0, - 598, 0, 0, 0, 0, -86, 0, 135, -373, -304, - 1277, 0, 421, 0, -349, 0, 966, 0, 1577, 148, - -305, -274, -81, 203, 1232, 0, 601, 0, -21, 509, - 1495, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -267, - 0, 28, 0, -352, 0, -280, 0, 0, 0, 931, - -927, -313, -132, 554, 0, 1026, 0, 1276, -343, 1160, - 0, 0, 828, 1851, 0, 0, 0, 0, 1137, 0, - 0, 0, 1593, 0, 0, 0, 0, 0, 1627, 986, - 987, 0, 946, 0, 812, 984, 1514, 1515, 1513, 1516, - 1517, 0, 1512, 0, 0, 0, 1084, 1364, -569, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -306, - 748, 0, -444, 0, 0, 0, 0, 0, -475, 0, - 681, 0, 573, 0, 0, 0, 0, 0, 787, -563, - -11, -334, -7, 0, 1796, 0, 48, 0, 85, 91, - 111, 128, 157, 173, 175, 181, 193, 194, 0, -662, - 0, -23, 0, 0, 882, 0, 804, 0, 0, 0, - 0, 784, -959, 862, -931, 0, 905, -489, 0, 0, - 0, 0, 0, 0, 800, 0, 802, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, - 0, -31, 0, 1416, 763, 0, 0, 985, 0, 0, - 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, - 1529, 1283, 0, 0, 0, 0, 1532, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, - 0, 0, 35, 1054, 0, 0, 0, 1062, + 0, 1794, 0, 0, 0, -3, -14, -182, -47, -27, + 0, 1846, 1854, 590, 0, 0, -183, 0, 0, 0, + 0, 0, 0,-1278, -800, -227, -557, 0, 0, 0, + 0, 0, -230, 0, 0, 0, 780, 0, 906, 0, + 0, 0, 0, 618, 624, -17, -231, 0, -46, 0, + 0, -559, 417, 0, 470, -628, -599, -598, -596, -592, + -588, -573, -515, 0, 0, -837, 0, -942, 0, 416, +-1297, 0, 38, 0, 0, 0, 581,-1234, 0, 0, + 0, 346, 250, 0, 0, 0, 288,-1214, 0, -287, + -303, -445, 0, 0, 0, -999, 236, 0, 0, -538, + 0, 0, 302, 0, 0, 275, 0, 0, 382, 0, + -564, -907, 0, 0, 0, 0, 0, -435, 310,-1457, + -10, 0, 0, 0, 909, 911, 915, 1115, -560, 0, + 0, -336, 927, 400, 0,-1254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, + 0, 0, -292, 393, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 477, 0, -541, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 214, 0, 0, 305, 0, + 0, 307, 311, 224, 0, 0, 0, 0, 0, 0, + 0, 0, 556, 0, 0, 0, 0, -86, 0, 872, + -316, -340, 1516, 0, 377, 0, -433, 0, 960, 0, + 1593, 65, -301, -278, -55, 259, 1009, 0, 562, 0, + -41, 942, -390, 0, 0, -386, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -381, 0, 0, 0, 0, + 0, 0, -269, 0, 0, 1320, 0, 0, 374, 0, + -366, 0, -279, 0, 0, 0, 922, -939, -315, -134, + 569, 0, 1005, 0, 1308, -600, -43, -348, 1147, 0, + 0, 795, 1857, 0, 0, 0, 0, 1119, 0, 0, + 0, 1583, 0, 0, 0, 0, 0, 1606, 987, 988, + 1510, -388, 1511, 0, 0, 0, 0, 774, 117, 0, + 771, 844, 984, 1506, 1507, 1505, 1508, 1509, 0, 1504, + 0, 0, 0, 1058, 1361, -579, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -306, 695, 0, -890, + 0, 0, 0, 0, 0, -487, 0, 617, 0, 513, + 0, 0, 0, 0, 0, 737, -577, -15, -346, 1, + 0, 1790, 0, 62, 0, 100, 101, 140, 147, 151, + 157, 175, 176, 179, 184, 0, -755, 0, 0, 0, + 839, 0, 753, 0, 0, 0, 0, 738, -987, 823, + -943, 0, 867, -500, 0, 0, 0, 0, 0, 0, + 752, 0, 758, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, + 0, 0, 0, 0, 0, 0, 0, -39, 0, 1409, + 708, 0, 0, 0, 0, 963, 0, 0, 0, 0, + 0, 0, -175, 0, 0, 0, 0, 0, 1529, 1245, + 0, 0, 0, 0, 1531, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, + 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, + 20, 1037, 0, 0, 0, 1046, }; - protected static readonly short [] yyTable = { 110, - 550, 193, 18, 547, 564, 159, 112, 238, 44, 160, - 239, 622, 817, 519, 459, 458, 823, 497, 761, 597, - 476, 299, 572, 545, 501, 196, 783, 580, 432, 543, - 861, 862, 397, 1108, 531, 389, 265, 398, 264, 866, - 332, 339, 612, 643, 1240, 346, 318, 1086, 257, 988, - 254, 634, 1274, 710, 1163, 1054, 310, 873, 1164, 886, - 317, 577, 744, 613, 164, 385, 1164, 829, 14, 319, - 933, 322, 254, 1495, 321, 903, 20, 1261, 355, 232, - 623, 1383, 234, 6, 333, 340, 1038, 51, 745, 268, - 727, 1303, 1113, 292, 293, 294, 858, 300, 301, 51, - 1390, 165, 314, 315, 194, 381, 1311, 166, 320, 323, - 754, 325, 1642, 329, 321, 340, 1152, 1324, 342, 343, - 746, 558, 386, 201, 472, 762, 1110, 167, 434, 968, - 1146, 969, 1450, 462, 1111, 1452, 463, 1458, 833, 863, - 788, 1261, 1152, 110, 168, 396, 1144, 255, 238, 159, - 112, 460, 326, 160, 198, 201, 1330, 859, 922, 728, - 886, 709, 539, 857, 115, 51, 255, 501, 1101, 1038, - 710, 200, 710, 169, 1038, 995, 1038, 295, 997, 1038, - 1038, 864, 1038, 1038, 95, 296, 95, 1, 255, 170, - 255, 171, 475, 1503, 1398, 460, 256, 172, 901, 465, - 466, 904, 1621, 499, 502, 1038, 373, 115, 164, 173, - 174, 115, 51, 1165, 886, 256, 856, 506, 43, 116, - 1113, 1165, 198, 198, 95, 747, 809, 710, 266, 374, - 255, 15, 1207, 1643, 500, 473, 375, 256, 497, 256, - 505, 815, 476, 198, 573, 165, 571, 297, 612, 574, - 372, 166, 875, 297, 530, 1446, 389, 879, 881, 597, - 1038, 467, 116, 1448, 507, 970, 116, 195, 515, 613, - 264, 167, 297, 755, 540, 1571, 541, 518, 255, 256, - 264, 1003, 522, 524, 877, 576, 597, 323, 168, 2, - 517, 396, 579, 1147, 1075, 1451, 613, 554, 1453, 373, - 1459, 570, 1595, 298, 590, 567, 379, 569, 115, 298, - 553, 522, 1054, 568, 1605, 393, 1606, 169, 902, 1504, - 1502, 1338, 374, 1308, 582, 583, 880, 256, 298, 375, - 542, 544, 1247, 170, 1229, 171, 376, 198, 198, 626, - 6, 172, 596, 631, 587, 588, 598, 502, 502, 267, - 1186, 620, 920, 173, 174, 732, 3, 4, 5, 6, - 732, 1318, 737, 116, 732, 619, 930, 791, 1041, 1589, - 603, 882, 1054, 344, 1265, 977, 1567, 500, 640, 732, - 1065, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 657, 264, 711, 713, 923, 955, 717, 1466, 900, - 501, 892, 198, 373, 980, 1533, 732, 1560, 931, 665, - 1616, 510, 297, 707, 238, 613, 1428, 460, 1159, 769, - 1296, 921, 393, 793, 738, 732, 374, 739, 198, 825, - 393, 1426, 393, 1339, 393, 236, 978, 712, 714, 115, - 198, 564, 1639, 852, 1309, 16, 1118, 827, 198, 382, - 837, 1041, 1248, 549, 198, 837, 1041, 1096, 1041, 297, - 840, 1041, 1041, 1612, 1041, 1041, 725, 781, 298, 789, - 413, 1613, 115, 960, 1073, 1079, 236, 1473, 393, 748, - 1427, 1319, 198, 198, 792, 1054, 883, 1041, 297, 1590, - 765, 1054, 782, 961, 116, 511, 502, 383, 779, 729, - 730, 115, 1009, 837, 770, 742, 414, 49, 198, 255, - 236, 966, 369, 198, 1467, 298, 345, 497, 2, 236, - 893, 236, 839, 981, 812, 119, 640, 116, 821, 531, - 612, 757, 1614, 236, 1012, 758, 1176, 501, 780, 1297, - 794, 1119, 1041, 1246, 624, 1151, 826, 198, 832, 967, - 497, 613, 1250, 203, 625, 95, 116, 842, 256, 384, - 844, 669, 379, 865, 828, 837, 780, 838, 119, 961, - 961, 1474, 119, 437, 372, 198, 198, 841, 853, 876, - 502, 1277, 596, 475, 896, 830, 598, 415, 416, 897, - 853, 1074, 20, 781, 386, 198, 759, 906, 540, 369, - 827, 837, 911, 912, 540, 1216, 1488, 837, 198, 596, - 500, 1341, 1360, 598, 837, 1063, 670, 462, 884, 884, - 919, 297, 599, 373, 369, 898, 438, 780, 369, 476, - 364, 126, 439, 126, 1341, 1521, 1522, 613, 126, 1524, - 386, 1323, 889, 512, 475, 379, 374, 861, 1058, 379, - 489, 513, 1543, 375, 781, 1550, 827, 1597, 1598, 540, - 376, 1360, 837, 115, 908, 1014, 910, 809, 228, 119, - 1566, 1602, 369, 439, 379, 918, 982, 629, 379, 600, - 379, 379, 379, 379, 1341, 490, 732, 630, 379, 627, - 476, 250, 812, 379, 1588, 251, 836, 812, 812, 890, - 914, 342, 753, 732, 514, 1095, 943, 489, 732, 1091, - 1085, 1067, 732, 550, 1633, 440, 985, 502, 116, 198, - 441, 55, 442, 1603, 719, 443, 444, 732, 445, 446, - 944, 753, 1429, 1361, 962, 753, 423, 424, 732, 628, - 236, 115, 490, 1362, 1363, 252, 198, 500, 1235, 530, - 730, 51, 204, 719, 732, 783, 440, 945, 439, 364, - 942, 441, 522, 442, 372, 364, 443, 444, 115, 445, - 446, 1155, 364, 732, 730, 264, 364, 821, 731, 1364, - 379, 1430, 1361, 1365, 812, 1331, 812, 716, 1269, 364, - 815, 605, 1362, 1363, 1454, 1366, 116, 228, 606, 231, - 119, 730, 731, 975, 1367, 379, 447, 719, 1468, 379, - 607, 364, 379, 373, 379, 1132, 716, 1368, 1006, 379, - 993, 364, 994, 116, 716, 998, 992, 999, 1364, 731, - 1486, 1032, 1365, 119, 597, 1055, 374, 1004, 1001, 502, - 853, 440, 1000, 375, 1366, 502, 441, 457, 442, 751, - 376, 443, 444, 1367, 445, 446, 990, 372, 1123, 1005, - 721, 345, 119, 390, 236, 198, 1368, 345, 95, 640, - 722, 255, 1093, 391, 346, 640, 597, 1415, 751, 373, - 1414, 535, 1208, 269, 1018, 738, 821, 535, 739, 721, - 440, 198, 392, 393, 1058, 441, 1187, 442, 461, 722, - 443, 444, 374, 445, 446, 1620, 373, 536, 373, 375, - 249, 537, 394, 1114, 1032, 1116, 376, 1243, 1121, 1032, - 256, 1032, 671, 395, 1032, 1032, 371, 1032, 1032, 374, - 812, 374, 518, 1034, 429, 386, 375, 1414, 375, 115, - 748, 115, 1047, 376, 898, 557, 430, 95, 756, 1080, - 1066, 371, 387, 755, 1082, 759, 1329, 1082, 558, 759, - 1276, 1132, 95, 761, 198, 326, 253, 812, 373, 821, - 597, 1415, 1099, 756, 1109, 559, 374, 302, 755, 303, - 198, 720, 756, 375, 759, 115, 1554, 755, 115, 208, - 386, 374, 946, 759, 116, 502, 116, 198, 375, 947, - 926, 198, 1179, 1439, 1181, 1032, 1182, 462, 812, 95, - 812, 1141, 927, 812, 203, 1439, 1034, 1145, 419, 420, - 326, 1034, 1028, 1034, 119, 1131, 1034, 1034, 1408, 1034, - 1034, 326, 421, 422, 605, 1420, 952, 341, 497, 476, - 116, 606, 847, 116, 1136, 748, 1378, 597, 1607, 1256, - 847, 1197, 1138, 607, 1139, 425, 1140, 821, 1443, 364, - 522, 364, 1465, 1198, 364, 364, 302, 1411, 302, 198, - 1443, 427, 364, 302, 1411, 683, 364, 683, 1107, 1465, - 893, 1283, 1284, 292, 292, 1629, 426, 198, 198, 364, - 1387, 228, 292, 233, 428, 853, 550, 812, 1497, 812, - 1498, 812, 119, 431, 1183, 1028, 1252, 1034, 1650, 1651, - 1028, 1188, 1028, 1189, 303, 1028, 1028, 844, 1028, 1028, - 864, 364, 464, 844, 864, 844, 864, 469, 864, 119, - 853, 1190, 498, 844, 853, 844, 853, 844, 853, 848, - 1287, 502, 1082, 848, 69, 69, 518, 848, 69, 417, - 418, 364, 364, 198, 364, 364, 62, 596, 764, 1217, - 821, 598, 765, 183, 853, 183, 549, 183, 196, 471, - 196, 1131, 196, 1228, 198, 799, 810, 344, 518, 800, - 537, 518, 198, 238, 352, 1259, 460, 1075, 1260, 1075, - 963, 369, 520, 1325, 964, 369, 1028, 364, 369, 596, - 369, 812, 521, 598, 984, 369, 562, 1255, 985, 496, - 236, 238, 1010, 1376, 460, 24, 765, 25, 1087, 855, - 26, 855, 985, 1231, 518, 27, 1058, 1232, 115, 28, - 685, 687, 689, 691, 399, 812, 1183, 45, 30, 369, - 911, 546, 915, 70, 911, 32, 915, 70, 117, 1259, - 33, 171, 1260, 171, 34, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 551, 36, 847, 37, 502, - 387, 847, 38, 1283, 1284, 1340, 1359, 555, 1260, 739, - 39, 40, 575, 116, 41, 1032, 1033, 563, 812, 552, - 178, 117, 178, 596, 556, 117, 199, 598, 1340, 640, - 119, 1260, 119, 410, 411, 412, 578, 179, 812, 179, - 518, 983, 72, 983, 72, 1335, 115, 1221, 1222, 338, - 338, 131, 586, 131, 602, 1359, 1394, 202, 739, 202, - 172, 617, 172, 24, 618, 25, 723, 308, 26, 308, - 338, 632, 138, 27, 138, 380, 119, 28, 1340, 119, - 1656, 1260, 315, 115, 315, 974, 30, 976, 115, 1292, - 236, 726, 115, 32, 199, 199, 198, 743, 33, 380, - 596, 116, 34, 766, 598, 1419, 374, 1335, 763, 374, - 469, 1617, 1618, 768, 36, 199, 37, 965, 965, 795, - 38, 115, 117, 732, 732, 1424, 1425, 790, 39, 40, - 676, 678, 41, 681, 683, 85, 693, 695, 116, 796, - 364, 797, 798, 116, 835, 836, 836, 116, 364, 843, - 364, 836, 845, 1457, 846, 847, 1460, 848, 836, 1477, - 867, 198, 868, 1419, 338, 338, 871, 872, 887, 364, - 364, 888, 874, 878, 907, 909, 116, 913, 924, 925, - 462, 115, 115, 198, 934, 935, 938, 43, 956, 364, - 200, 1534, 957, 950, 739, 958, 959, 364, 965, 983, - 364, 986, 893, 989, 987, 1002, 836, 1008, 1561, 199, - 199, 739, 1022, 1027, 1029, 1034, 1037, 380, 38, 1042, - 1045, 1573, 1575, 1043, 739, 739, 1048, 1046, 821, 338, - 1051, 1053, 1059, 1419, 1071, 1072, 116, 116, 1075, 1081, - 518, 1090, 540, 1104, 1097, 198, 1105, 198, 1561, 1561, - 1124, 739, 739, 117, 198, 338, 1134, 1583, 1148, 115, - 364, 1149, 1142, 198, 198, 1150, 198, 338, 1158, 1160, - 1161, 1171, 1442, 1172, 199, 338, 1177, 1174, 1178, 549, - 1180, 338, 1192, 1196, 1442, 1200, 117, 1199, 1201, 1442, - 821, 198, 1209, 1205, 198, 1202, 661, 1204, 1213, 1220, - 199, 1223, 1224, 1442, 1232, 1561, 1231, 1241, 739, 338, - 338, 829, 199, 1251, 116, 117, 1258, 1286, 1289, 119, - 199, 1270, 502, 502, 1295, 1442, 199, 821, 1291, 1294, - 1298, 1299, 1307, 1304, 1312, 338, 1314, 1328, 1320, 1321, - 338, 1329, 1635, 1635, 1372, 1374, 1373, 1381, 1431, 1644, - 1644, 1445, 640, 640, 199, 199, 1379, 1377, 1380, 1384, - 1391, 1396, 1449, 1462, 1655, 1471, 1463, 1472, 1480, 1474, - 1482, 1485, 1453, 1483, 338, 117, 1487, 1491, 1494, 661, - 199, 1493, 1414, 1489, 661, 199, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 1500, 1501, 1507, - 1510, 1514, 338, 338, 1515, 1513, 1544, 119, 1525, 661, - 1517, 661, 1526, 661, 1556, 661, 661, 661, 1529, 199, - 1539, 1555, 1546, 1558, 1559, 1565, 1568, 1579, 1582, 1569, - 1580, 661, 1584, 1585, 1587, 1600, 1604, 1609, 1611, 1593, - 1608, 1619, 1603, 1602, 119, 1627, 1628, 199, 199, 119, - 353, 1647, 1649, 119, 357, 359, 361, 363, 365, 367, - 369, 371, 1653, 1654, 1658, 9, 1071, 199, 573, 950, - 661, 533, 951, 1063, 685, 38, 534, 117, 489, 38, - 199, 965, 119, 686, 532, 33, 33, 767, 857, 490, - 38, 34, 337, 364, 232, 38, 106, 34, 958, 38, - 858, 881, 38, 849, 850, 882, 916, 755, 918, 341, - 917, 920, 780, 732, 38, 38, 364, 732, 755, 38, - 38, 364, 364, 134, 116, 38, 311, 38, 38, 38, - 38, 141, 135, 117, 312, 38, 142, 235, 54, 38, - 21, 38, 119, 119, 364, 1125, 338, 1041, 1226, 24, - 1227, 38, 1422, 38, 38, 117, 38, 364, 364, 1385, - 38, 1423, 364, 1275, 1601, 364, 1570, 364, 1557, 364, - 364, 364, 364, 338, 1475, 1610, 1586, 364, 1552, 1068, - 38, 364, 117, 1064, 1069, 364, 1070, 38, 38, 953, - 1455, 199, 1389, 364, 1646, 1392, 364, 1476, 364, 364, - 1638, 1581, 1576, 364, 364, 1574, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 199, 1637, - 119, 1315, 364, 364, 1499, 1038, 565, 1316, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 672, 364, - 364, 1089, 886, 364, 364, 364, 364, 364, 1015, 1162, - 364, 364, 305, 477, 949, 364, 364, 364, 364, 364, - 364, 364, 364, 971, 353, 37, 584, 1100, 697, 701, - 699, 706, 1239, 703, 364, 705, 478, 364, 850, 364, - 1007, 364, 1301, 1397, 364, 1211, 433, 1203, 1154, 479, - 364, 1218, 338, 1173, 481, 1143, 1210, 581, 1281, 482, - 1212, 483, 484, 485, 486, 834, 1249, 353, 721, 487, - 1102, 722, 1395, 488, 1288, 1039, 1036, 1434, 338, 0, - 0, 0, 0, 0, 0, 489, 0, 0, 490, 0, - 491, 0, 0, 917, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 492, 117, 36, 0, 0, 0, - 0, 1435, 0, 199, 0, 0, 659, 661, 663, 0, - 0, 581, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 581, 581, 581, 581, 581, 0, 0, 0, - 0, 338, 0, 0, 0, 0, 0, 0, 0, 117, - 0, 0, 117, 0, 0, 0, 24, 338, 0, 0, - 24, 1436, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 338, 0, 24, 0, 338, 0, - 24, 0, 0, 24, 0, 0, 199, 1044, 0, 0, - 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, - 24, 24, 199, 0, 0, 0, 24, 0, 24, 24, - 24, 24, 0, 0, 0, 0, 24, 0, 0, 199, - 24, 0, 24, 199, 0, 0, 0, 833, 0, 0, - 0, 0, 24, 0, 0, 24, 0, 24, 0, 0, - 0, 24, 0, 0, 0, 0, 581, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 338, 338, 0, 21, 24, 24, - 1044, 0, 37, 0, 0, 1044, 37, 1044, 1044, 1044, - 1044, 1044, 1044, 1044, 1044, 1044, 1044, 37, 0, 0, - 0, 199, 37, 0, 0, 0, 37, 0, 0, 37, - 1044, 0, 1044, 0, 1044, 0, 1044, 1044, 1044, 199, - 199, 37, 37, 0, 0, 0, 37, 37, 0, 0, - 0, 0, 37, 870, 37, 37, 37, 37, 0, 0, - 338, 0, 37, 0, 0, 0, 37, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, - 37, 37, 0, 37, 0, 0, 0, 37, 0, 338, - 0, 1044, 0, 36, 0, 0, 0, 36, 0, 0, - 0, 444, 0, 894, 895, 199, 541, 37, 36, 444, - 0, 444, 541, 36, 0, 37, 353, 36, 0, 0, - 36, 0, 117, 0, 0, 0, 199, 0, 0, 0, - 444, 444, 36, 36, 199, 0, 0, 36, 36, 0, - 0, 0, 0, 36, 0, 36, 36, 36, 36, 0, - 444, 0, 0, 36, 0, 0, 0, 36, 444, 36, - 0, 444, 0, 0, 0, 0, 0, 541, 664, 36, - 0, 0, 36, 0, 36, 0, 0, 24, 36, 25, - 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, - 0, 28, 0, 545, 0, 0, 0, 0, 36, 0, - 30, 0, 0, 0, 0, 36, 36, 32, 0, 0, - 117, 0, 33, 833, 0, 0, 34, 0, 833, 833, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 0, 0, 0, 38, 0, 0, 353, 0, 0, - 0, 833, 39, 40, 0, 0, 41, 117, 0, 85, - 0, 0, 117, 0, 833, 833, 117, 0, 0, 833, - 0, 0, 833, 0, 833, 0, 833, 833, 833, 833, - 0, 0, 0, 338, 833, 0, 0, 0, 833, 0, - 0, 0, 833, 0, 0, 117, 0, 0, 0, 0, - 833, 0, 0, 833, 0, 833, 833, 0, 0, 0, - 833, 833, 0, 833, 833, 833, 833, 833, 833, 833, - 833, 833, 833, 833, 0, 0, 0, 0, 199, 833, - 833, 0, 0, 0, 0, 833, 833, 833, 833, 833, - 833, 380, 833, 833, 833, 0, 833, 833, 338, 0, - 833, 833, 833, 833, 0, 117, 117, 833, 833, 0, - 0, 0, 833, 833, 833, 833, 833, 833, 833, 833, - 338, 0, 952, 24, 0, 25, 0, 0, 26, 0, - 1332, 833, 0, 27, 833, 0, 833, 28, 833, 0, - 0, 833, 0, 199, 0, 0, 30, 833, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 1333, 0, 34, 0, 0, 199, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 581, 0, 0, - 38, 1334, 338, 117, 338, 0, 0, 0, 39, 40, - 0, 338, 41, 0, 0, 85, 0, 0, 0, 0, - 338, 338, 0, 338, 0, 0, 0, 0, 0, 545, - 0, 0, 0, 0, 545, 545, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 199, 338, 199, - 0, 338, 0, 0, 0, 0, 199, 545, 0, 0, - 0, 0, 0, 0, 0, 199, 199, 0, 199, 0, - 545, 545, 0, 0, 0, 545, 0, 0, 545, 0, - 545, 0, 545, 545, 545, 545, 0, 0, 0, 0, - 545, 0, 0, 199, 545, 0, 199, 380, 545, 0, - 0, 0, 0, 0, 0, 0, 545, 0, 0, 545, - 875, 545, 545, 0, 0, 0, 545, 545, 0, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, - 0, 0, 0, 0, 0, 545, 545, 545, 0, 0, - 0, 545, 545, 0, 545, 545, 545, 545, 545, 545, - 545, 0, 545, 545, 0, 545, 545, 545, 545, 545, - 545, 545, 545, 545, 545, 0, 545, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 0, 0, - 545, 0, 545, 0, 545, 0, 0, 545, 952, 952, - 0, 0, 0, 545, 0, 0, 952, 952, 952, 952, - 952, 0, 952, 952, 0, 952, 952, 952, 952, 952, - 952, 952, 952, 0, 0, 0, 0, 952, 0, 952, - 952, 952, 952, 952, 952, 0, 0, 952, 0, 0, - 354, 952, 952, 0, 952, 952, 952, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 952, 0, 952, 0, - 952, 952, 0, 0, 952, 0, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 0, 952, - 0, 0, 952, 952, 0, 0, 952, 952, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 952, 952, 952, 952, 952, 0, 0, 0, 0, - 952, 952, 0, 0, 952, 0, 0, 0, 0, 952, - 952, 952, 952, 952, 0, 0, 0, 952, 0, 952, - 0, 0, 0, 0, 0, 952, 952, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 952, 952, 952, 952, 0, 952, 875, 875, 0, 0, - 0, 394, 952, 0, 875, 875, 875, 875, 875, 0, - 875, 875, 0, 875, 875, 875, 875, 875, 875, 875, - 0, 0, 0, 0, 0, 875, 0, 875, 875, 875, - 875, 875, 875, 0, 0, 875, 0, 0, 0, 875, - 875, 0, 875, 875, 875, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 875, 0, 875, 0, 875, 875, - 0, 0, 875, 0, 875, 875, 875, 875, 875, 875, - 875, 875, 875, 875, 875, 875, 0, 875, 0, 0, - 875, 875, 0, 0, 875, 875, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, - 875, 875, 875, 875, 0, 0, 364, 0, 875, 875, - 0, 0, 875, 0, 0, 0, 0, 875, 875, 875, - 875, 875, 0, 0, 0, 875, 354, 875, 0, 0, - 0, 354, 354, 875, 875, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 354, 0, 0, 0, 875, 875, - 875, 875, 0, 875, 0, 0, 0, 354, 354, 0, - 875, 0, 354, 0, 0, 354, 0, 354, 0, 354, - 354, 354, 354, 0, 0, 0, 0, 354, 0, 0, - 0, 354, 0, 0, 0, 354, 0, 0, 0, 0, - 0, 0, 0, 354, 0, 0, 354, 0, 354, 354, - 0, 399, 0, 354, 354, 0, 354, 354, 354, 354, - 354, 354, 354, 354, 354, 354, 354, 0, 0, 0, - 0, 0, 354, 354, 0, 0, 0, 0, 354, 354, - 354, 354, 354, 354, 0, 354, 354, 354, 0, 354, - 354, 0, 0, 354, 354, 354, 354, 394, 0, 0, - 354, 354, 394, 394, 0, 354, 354, 354, 354, 354, - 354, 354, 354, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 354, 394, 0, 354, 0, 354, - 0, 354, 0, 0, 354, 0, 0, 0, 394, 394, - 354, 0, 0, 394, 0, 0, 394, 0, 394, 0, - 394, 394, 394, 394, 0, 0, 0, 0, 394, 0, - 0, 0, 394, 0, 0, 0, 394, 0, 0, 0, - 0, 0, 0, 0, 394, 0, 0, 394, 0, 394, - 394, 0, 0, 0, 394, 394, 0, 394, 394, 394, - 394, 394, 394, 394, 394, 394, 394, 394, 0, 0, - 0, 0, 364, 394, 394, 0, 0, 0, 364, 394, - 394, 0, 394, 394, 394, 0, 394, 394, 394, 0, - 394, 394, 31, 0, 394, 394, 394, 394, 0, 0, - 0, 394, 394, 0, 0, 0, 394, 394, 394, 394, - 394, 394, 394, 394, 364, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 394, 0, 0, 394, 0, - 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 364, 0, 0, 0, 364, - 364, 0, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 0, 0, 0, 399, 0, 364, - 0, 0, 0, 399, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 0, 364, 364, 0, 0, 364, - 364, 364, 364, 364, 0, 0, 364, 364, 25, 0, - 0, 364, 364, 364, 364, 364, 364, 364, 364, 399, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 364, 0, 0, 364, 0, 364, 0, 364, 0, 0, - 364, 0, 0, 0, 0, 0, 364, 0, 0, 0, - 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 399, 0, 0, 0, 399, 399, 0, 399, 399, 399, - 399, 399, 399, 399, 399, 399, 399, 399, 0, 0, - 0, 0, 0, 0, 399, 0, 0, 0, 0, 399, - 399, 399, 399, 399, 399, 0, 399, 399, 399, 0, - 399, 399, 0, 0, 399, 399, 399, 399, 0, 0, - 0, 399, 399, 0, 0, 0, 399, 399, 399, 399, - 399, 399, 399, 399, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 399, 0, 0, 399, 0, - 399, 0, 399, 0, 0, 399, 0, 0, 31, 31, - 0, 399, 0, 31, 0, 0, 0, 31, 0, 31, - 0, 0, 31, 0, 31, 31, 0, 31, 0, 31, - 0, 31, 0, 31, 31, 31, 31, 0, 1052, 31, - 31, 0, 0, 0, 0, 31, 0, 31, 31, 31, - 0, 0, 31, 31, 31, 0, 31, 0, 0, 31, - 0, 31, 31, 31, 31, 0, 0, 0, 31, 31, - 31, 0, 0, 31, 31, 31, 0, 0, 0, 0, - 0, 0, 31, 31, 0, 31, 31, 0, 31, 31, - 31, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 31, 31, 31, 0, 0, 25, 0, 0, 0, 25, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 7, 25, 0, 0, 0, 25, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 25, 0, 0, 35, 25, - 25, 31, 35, 0, 0, 25, 0, 25, 25, 25, - 25, 0, 0, 35, 0, 25, 0, 1053, 35, 25, - 0, 25, 35, 0, 0, 35, 0, 0, 0, 0, - 0, 25, 0, 0, 25, 0, 25, 35, 35, 0, - 25, 0, 35, 35, 0, 0, 0, 0, 35, 0, - 35, 35, 35, 35, 0, 0, 0, 0, 35, 0, - 25, 0, 35, 0, 35, 0, 0, 25, 25, 0, - 0, 0, 0, 0, 35, 0, 0, 35, 5, 35, - 52, 0, 51, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 0, 0, 51, 0, - 0, 0, 51, 35, 0, 51, 0, 0, 0, 0, - 0, 35, 0, 0, 0, 0, 0, 51, 51, 0, - 0, 0, 51, 51, 0, 1052, 0, 0, 51, 51, - 51, 51, 51, 51, 0, 0, 0, 0, 51, 0, - 51, 0, 51, 0, 51, 51, 0, 0, 0, 51, - 0, 0, 51, 0, 51, 0, 0, 51, 0, 51, - 0, 0, 0, 51, 51, 51, 0, 0, 0, 51, - 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, - 51, 0, 0, 51, 0, 51, 0, 0, 51, 51, - 0, 51, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 0, 51, 51, 0, 51, 0, 51, 0, - 51, 0, 51, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 51, 51, 0, - 51, 7, 51, 51, 0, 52, 0, 0, 51, 0, - 51, 51, 51, 51, 0, 0, 52, 0, 51, 0, - 0, 52, 51, 0, 51, 52, 0, 0, 52, 0, - 0, 0, 0, 0, 51, 0, 0, 51, 0, 51, - 52, 52, 0, 51, 1053, 52, 52, 0, 51, 0, - 0, 52, 0, 52, 52, 52, 52, 0, 0, 51, - 0, 52, 0, 51, 51, 52, 0, 52, 51, 0, - 0, 51, 0, 0, 0, 0, 0, 52, 0, 0, - 52, 0, 52, 51, 51, 0, 52, 0, 51, 51, - 0, 0, 0, 0, 51, 0, 51, 51, 51, 51, - 0, 0, 0, 0, 51, 0, 52, 52, 51, 0, - 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 0, 52, 51, 0, 51, 0, 52, 0, 51, - 0, 52, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 52, 52, 0, 51, - 0, 52, 52, 0, 0, 0, 0, 52, 0, 52, - 52, 52, 52, 0, 0, 0, 0, 52, 0, 0, - 0, 52, 0, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 56, 52, 0, 52, 0, - 0, 0, 52, 57, 24, 58, 25, 0, 0, 26, + protected static readonly short [] yyTable = { 112, + 18, 163, 552, 196, 239, 555, 114, 831, 524, 502, + 481, 775, 837, 466, 608, 469, 266, 164, 265, 465, + 797, 506, 300, 577, 240, 550, 548, 881, 569, 587, + 440, 684, 882, 536, 404, 685, 654, 1010, 319, 1298, + 686, 333, 343, 44, 1152, 1091, 350, 910, 258, 623, + 990, 634, 991, 645, 893, 928, 311, 1127, 877, 1334, + 318, 584, 886, 396, 233, 405, 745, 235, 392, 320, + 1215, 323, 1555, 921, 1526, 633, 522, 358, 168, 1216, + 362, 1305, 1216, 918, 255, 1142, 1075, 805, 758, 53, + 1170, 14, 477, 624, 322, 1390, 1017, 197, 406, 1019, + 1363, 53, 1443, 768, 267, 1157, 751, 444, 802, 1662, + 1563, 255, 390, 322, 759, 1371, 169, 170, 380, 751, + 380, 1450, 1368, 1198, 349, 1510, 1196, 1512, 1078, 1204, + 349, 1343, 1344, 296, 296, 71, 71, 350, 955, 71, + 1447, 381, 296, 381, 1518, 379, 760, 112, 239, 163, + 382, 751, 339, 339, 114, 1204, 171, 383, 390, 751, + 445, 1663, 198, 172, 725, 164, 930, 173, 467, 1075, + 506, 935, 936, 174, 1075, 339, 1075, 921, 929, 1075, + 1075, 383, 1075, 1075, 944, 1171, 745, 776, 745, 43, + 480, 175, 176, 1527, 1506, 177, 522, 380, 522, 97, + 178, 1681, 1508, 256, 1306, 504, 507, 806, 1075, 97, + 467, 1078, 919, 256, 1116, 298, 1078, 53, 1078, 511, + 381, 1078, 1078, 237, 1078, 1078, 168, 382, 268, 823, + 256, 921, 256, 298, 383, 505, 502, 1217, 481, 1564, + 1217, 510, 860, 745, 829, 579, 1369, 472, 1091, 520, + 1078, 265, 257, 522, 761, 623, 535, 15, 608, 1562, + 1157, 265, 257, 1075, 169, 170, 859, 339, 339, 769, + 992, 478, 1265, 576, 299, 118, 580, 380, 523, 257, + 873, 257, 575, 527, 529, 608, 396, 582, 1027, 1199, + 897, 1511, 299, 1513, 977, 762, 1631, 586, 559, 624, + 381, 900, 1091, 1037, 171, 1078, 572, 382, 574, 597, + 1519, 172, 527, 1378, 573, 173, 6, 389, 118, 1649, + 895, 174, 118, 1655, 298, 899, 901, 1533, 589, 590, + 624, 916, 2, 339, 296, 1665, 1002, 1666, 1356, 175, + 176, 1287, 297, 177, 1593, 607, 348, 637, 178, 807, + 631, 642, 1702, 869, 839, 507, 507, 1307, 872, 339, + 1293, 609, 841, 851, 1091, 390, 1211, 1620, 1657, 1658, + 1091, 554, 630, 1627, 854, 767, 1244, 421, 687, 339, + 265, 1325, 902, 299, 505, 651, 1114, 393, 515, 659, + 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, + 1329, 727, 729, 20, 1398, 733, 872, 506, 381, 945, + 1096, 237, 16, 422, 1106, 382, 339, 339, 239, 1676, + 327, 724, 1384, 118, 1534, 1693, 752, 767, 49, 298, + 391, 1108, 298, 334, 344, 269, 1379, 383, 467, 293, + 294, 295, 1650, 301, 302, 339, 753, 1134, 315, 316, + 1321, 1699, 624, 917, 321, 324, 388, 326, 1003, 330, + 1357, 237, 1488, 237, 346, 347, 843, 97, 97, 808, + 1137, 872, 516, 795, 840, 803, 1703, 796, 569, 610, + 397, 1, 842, 852, 237, 339, 1120, 982, 299, 743, + 744, 299, 349, 403, 855, 756, 783, 423, 424, 1458, + 903, 200, 507, 793, 779, 1166, 1115, 1168, 1304, 878, + 1173, 965, 339, 339, 913, 1021, 1321, 1310, 437, 1399, + 383, 237, 502, 1486, 383, 999, 638, 20, 853, 826, + 438, 651, 883, 835, 684, 966, 611, 1672, 685, 1020, + 344, 536, 504, 686, 1040, 1673, 1337, 506, 470, 471, + 623, 118, 383, 846, 544, 502, 383, 943, 383, 383, + 383, 383, 967, 857, 298, 505, 383, 861, 1229, 446, + 879, 914, 1487, 6, 884, 885, 639, 1203, 952, 1035, + 874, 784, 358, 2, 118, 870, 1000, 397, 767, 607, + 53, 896, 507, 767, 624, 55, 404, 767, 397, 504, + 397, 870, 397, 908, 908, 609, 1674, 1237, 1383, 1239, + 201, 1240, 767, 237, 512, 1548, 607, 298, 379, 118, + 953, 505, 505, 635, 771, 1141, 767, 405, 772, 905, + 905, 767, 609, 636, 324, 767, 373, 1104, 403, 767, + 522, 926, 201, 560, 1581, 1582, 397, 1274, 1584, 560, + 767, 446, 447, 3, 4, 5, 6, 448, 767, 449, + 558, 1603, 450, 451, 1610, 452, 453, 1163, 1099, 545, + 380, 546, 815, 256, 490, 816, 640, 767, 549, 1626, + 118, 932, 624, 934, 203, 1042, 641, 823, 1004, 773, + 346, 881, 942, 381, 204, 491, 767, 594, 595, 754, + 382, 517, 1474, 1648, 560, 229, 872, 383, 826, 518, + 256, 843, 872, 826, 826, 97, 938, 1312, 250, 872, + 446, 256, 257, 373, 1475, 547, 614, 1132, 1136, 97, + 1680, 754, 507, 815, 447, 490, 816, 1489, 1389, 448, + 53, 449, 555, 379, 450, 451, 339, 452, 453, 984, + 251, 373, 1421, 1347, 252, 373, 491, 368, 129, 257, + 129, 505, 519, 383, 535, 129, 677, 872, 684, 265, + 257, 684, 685, 762, 684, 685, 527, 686, 685, 118, + 686, 1422, 1423, 686, 1424, 997, 1490, 765, 1425, 425, + 426, 835, 1426, 728, 730, 380, 375, 766, 826, 373, + 826, 1421, 797, 447, 253, 237, 1385, 1427, 448, 964, + 449, 765, 1207, 450, 451, 988, 452, 453, 381, 735, + 254, 766, 1401, 1420, 375, 382, 1436, 1162, 454, 829, + 1422, 1423, 383, 1424, 1015, 1391, 1016, 1425, 765, 1032, + 1022, 1426, 393, 380, 1023, 1401, 380, 1069, 766, 578, + 383, 1184, 742, 989, 1028, 1025, 1427, 870, 562, 786, + 908, 1038, 394, 118, 507, 1428, 381, 948, 756, 381, + 507, 563, 1420, 382, 608, 327, 382, 1052, 383, 949, + 383, 687, 383, 265, 368, 383, 362, 383, 564, 794, + 118, 786, 383, 651, 871, 1401, 762, 464, 1175, 651, + 756, 835, 447, 379, 752, 118, 118, 448, 339, 449, + 1154, 1064, 450, 451, 1428, 452, 453, 757, 1155, 968, + 1514, 794, 608, 1126, 753, 794, 969, 339, 1266, 1007, + 1069, 393, 741, 1474, 1528, 1069, 844, 1069, 791, 270, + 1069, 1069, 380, 1069, 1069, 1245, 790, 339, 788, 757, + 1099, 578, 826, 794, 523, 380, 1546, 368, 121, 337, + 337, 97, 794, 368, 327, 381, 791, 926, 97, 1301, + 1475, 1121, 382, 368, 790, 791, 1123, 368, 381, 1123, + 788, 563, 337, 790, 788, 382, 327, 616, 1071, 826, + 368, 835, 383, 211, 617, 1255, 736, 1468, 847, 1087, + 1153, 121, 393, 345, 1480, 121, 618, 1256, 229, 926, + 232, 775, 1336, 993, 45, 1184, 924, 993, 608, 993, + 925, 206, 368, 433, 1069, 119, 541, 923, 427, 428, + 542, 616, 1499, 974, 1503, 327, 507, 1614, 617, 229, + 339, 234, 429, 430, 1499, 1065, 1503, 826, 882, 826, + 618, 1160, 826, 1193, 899, 879, 882, 1161, 899, 1197, + 899, 879, 899, 879, 118, 1183, 118, 434, 119, 883, + 337, 1071, 119, 883, 337, 337, 1071, 883, 1071, 778, + 435, 1071, 1071, 779, 1071, 1071, 888, 555, 481, 502, + 888, 436, 888, 555, 888, 608, 342, 342, 835, 1667, + 1438, 527, 306, 1316, 306, 439, 121, 813, 554, 306, + 118, 814, 824, 118, 1052, 687, 542, 265, 687, 342, + 265, 687, 1223, 265, 431, 432, 985, 1190, 1065, 1191, + 986, 1192, 1230, 1065, 304, 1065, 1689, 870, 1065, 1065, + 337, 1065, 1065, 368, 368, 468, 368, 368, 64, 826, + 1471, 826, 339, 826, 474, 368, 1241, 1471, 1710, 1711, + 555, 368, 118, 1289, 476, 1071, 337, 1290, 879, 503, + 879, 368, 879, 119, 718, 368, 718, 348, 337, 1525, + 186, 1248, 186, 118, 186, 356, 337, 1006, 368, 1014, + 525, 1007, 337, 1036, 1123, 373, 1525, 779, 523, 373, + 507, 368, 373, 1128, 373, 607, 946, 1007, 1024, 373, + 946, 342, 342, 1275, 835, 1557, 870, 1558, 501, 237, + 368, 609, 1065, 337, 337, 303, 950, 304, 1031, 1183, + 950, 397, 578, 1286, 121, 1075, 523, 72, 239, 523, + 1319, 72, 256, 373, 398, 882, 199, 551, 199, 882, + 199, 368, 337, 607, 368, 598, 599, 337, 467, 826, + 1320, 600, 601, 399, 400, 1315, 526, 121, 239, 609, + 702, 704, 706, 708, 1151, 1233, 917, 342, 1235, 418, + 419, 420, 523, 401, 1099, 1246, 556, 1247, 467, 1343, + 1344, 257, 337, 394, 402, 826, 1241, 1112, 890, 1112, + 890, 119, 121, 342, 557, 174, 1319, 174, 181, 182, + 181, 182, 1071, 1072, 368, 342, 1020, 560, 1020, 337, + 337, 1107, 871, 342, 561, 368, 1320, 368, 871, 342, + 507, 581, 1400, 1419, 119, 871, 74, 205, 74, 205, + 175, 583, 175, 134, 585, 134, 368, 368, 826, 607, + 337, 628, 1320, 753, 339, 1400, 312, 593, 312, 651, + 342, 342, 141, 683, 141, 609, 368, 643, 826, 119, + 523, 319, 629, 319, 368, 1320, 739, 368, 1279, 1280, + 118, 777, 1419, 871, 996, 1140, 998, 1454, 757, 342, + 1352, 237, 381, 474, 342, 1677, 1678, 459, 459, 460, + 460, 780, 753, 1001, 1001, 1400, 767, 767, 1716, 693, + 695, 782, 698, 700, 710, 712, 381, 118, 810, 804, + 118, 339, 811, 118, 812, 1320, 607, 809, 849, 342, + 119, 850, 856, 1188, 858, 1479, 567, 862, 863, 864, + 449, 865, 609, 339, 887, 24, 888, 25, 561, 891, + 26, 449, 892, 449, 561, 27, 342, 342, 894, 28, + 898, 911, 121, 337, 39, 912, 931, 933, 30, 937, + 387, 946, 449, 449, 947, 32, 578, 956, 957, 118, + 33, 960, 972, 978, 34, 1005, 43, 979, 980, 1537, + 981, 987, 449, 1479, 337, 200, 36, 1008, 37, 1011, + 449, 917, 38, 449, 1009, 339, 1026, 1034, 1029, 561, + 39, 40, 1030, 1047, 41, 1051, 1066, 568, 1594, 1068, + 1073, 1082, 118, 339, 339, 1077, 554, 118, 1083, 119, + 1085, 118, 1086, 1088, 1091, 1621, 1093, 1100, 753, 1112, + 1113, 1116, 1122, 1131, 1145, 545, 121, 1138, 1633, 1635, + 1146, 339, 1149, 337, 339, 753, 407, 1159, 835, 1164, + 118, 1176, 1150, 1479, 1165, 1186, 1200, 1201, 753, 753, + 523, 1194, 1202, 121, 1210, 1621, 1621, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 1643, 121, 121, + 1212, 1213, 1224, 1231, 1226, 753, 753, 1232, 1238, 1228, + 342, 1250, 387, 338, 338, 1254, 1257, 1258, 1259, 1260, + 1262, 1263, 337, 119, 1267, 1271, 337, 1278, 1281, 1282, + 835, 1299, 118, 118, 1289, 1290, 338, 1311, 1318, 1330, + 1346, 342, 1621, 1349, 1354, 1351, 1355, 1359, 1358, 1367, + 119, 1364, 337, 1372, 1374, 1380, 1381, 1389, 1432, 1388, + 1434, 1433, 753, 507, 507, 119, 119, 835, 1491, 1505, + 1440, 1437, 1439, 1522, 1444, 5, 1441, 1451, 1509, 1456, + 1531, 1540, 1695, 1695, 1523, 1551, 1532, 1534, 1542, 1704, + 1704, 1543, 651, 651, 1545, 1547, 1553, 1549, 1513, 1554, + 342, 1474, 1560, 1561, 1715, 1570, 1574, 1567, 1573, 357, + 118, 1575, 1577, 1585, 1586, 364, 366, 368, 370, 372, + 374, 376, 378, 1589, 338, 337, 1599, 1604, 338, 338, + 1606, 39, 1618, 1616, 1395, 39, 1615, 1628, 1639, 1619, + 1625, 1663, 1653, 1664, 337, 1629, 39, 1640, 1642, 1645, + 1647, 39, 1660, 1668, 1669, 39, 1679, 121, 39, 121, + 1644, 1671, 1662, 342, 337, 1687, 1688, 1707, 337, 1713, + 39, 39, 1709, 9, 1714, 39, 39, 21, 1108, 1718, + 593, 39, 985, 39, 39, 39, 39, 553, 986, 342, + 720, 39, 1100, 554, 338, 39, 1395, 39, 504, 1001, + 721, 802, 341, 121, 35, 552, 121, 39, 505, 39, + 39, 35, 39, 656, 1484, 1485, 39, 36, 235, 36, + 338, 993, 657, 109, 119, 884, 119, 916, 893, 885, + 951, 952, 338, 917, 790, 953, 39, 345, 337, 368, + 338, 815, 1517, 955, 790, 1520, 338, 39, 137, 767, + 119, 767, 613, 315, 236, 121, 337, 337, 144, 138, + 120, 24, 342, 25, 316, 145, 26, 54, 21, 1177, + 119, 27, 1081, 119, 1284, 28, 683, 338, 338, 1482, + 1285, 342, 1445, 1483, 30, 26, 1335, 1661, 1630, 1670, + 1617, 32, 1646, 1612, 1515, 1535, 33, 1109, 1706, 1110, + 34, 342, 1452, 1111, 1449, 342, 338, 1536, 1698, 975, + 1105, 338, 36, 1636, 37, 1641, 1634, 1697, 38, 1375, + 1559, 1078, 119, 570, 357, 337, 39, 40, 1376, 876, + 41, 1043, 5, 85, 1130, 971, 53, 1214, 306, 993, + 591, 688, 689, 119, 1234, 1236, 338, 53, 714, 718, + 716, 723, 53, 720, 1033, 722, 53, 1297, 1361, 53, + 588, 337, 867, 1457, 441, 909, 1206, 1269, 1261, 337, + 357, 53, 53, 338, 338, 1225, 53, 53, 1195, 1276, + 1268, 1341, 53, 848, 53, 53, 53, 53, 1270, 1308, + 1143, 941, 53, 342, 342, 737, 53, 738, 53, 1455, + 1079, 1348, 1076, 0, 338, 0, 0, 0, 53, 0, + 0, 53, 0, 53, 0, 0, 0, 53, 387, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 671, 673, 675, 0, 53, 588, 588, + 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, + 588, 588, 588, 588, 0, 0, 0, 0, 0, 0, + 676, 0, 342, 0, 0, 0, 0, 0, 0, 24, + 0, 25, 0, 121, 26, 0, 0, 0, 0, 27, + 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 342, 0, 34, 0, + 683, 0, 0, 683, 0, 0, 683, 338, 0, 0, + 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, + 119, 85, 26, 0, 0, 0, 26, 0, 338, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 588, 0, 26, 0, 0, 0, 26, 0, 0, 26, + 0, 337, 121, 0, 40, 0, 0, 119, 0, 0, + 119, 26, 26, 119, 0, 0, 26, 26, 0, 0, + 0, 0, 26, 0, 26, 26, 26, 26, 0, 0, + 0, 0, 26, 0, 0, 0, 26, 338, 26, 0, + 0, 0, 0, 482, 0, 121, 0, 0, 26, 0, + 121, 26, 0, 26, 121, 0, 387, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 0, 337, 119, + 0, 0, 1089, 890, 0, 0, 0, 26, 0, 484, + 0, 0, 0, 121, 486, 0, 23, 26, 26, 487, + 337, 488, 489, 490, 491, 0, 338, 0, 0, 492, + 338, 0, 0, 493, 0, 0, 0, 1494, 0, 0, + 0, 0, 119, 0, 0, 494, 0, 119, 495, 0, + 496, 119, 0, 0, 921, 922, 338, 0, 0, 0, + 0, 0, 0, 0, 0, 565, 0, 0, 342, 0, + 0, 0, 357, 0, 497, 121, 121, 0, 0, 0, + 119, 0, 337, 0, 337, 0, 0, 0, 0, 0, + 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, + 337, 337, 0, 337, 0, 0, 0, 0, 0, 1502, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1502, 0, 0, 0, 0, 1502, 1013, 337, 338, + 0, 337, 0, 0, 1496, 342, 24, 0, 25, 0, + 1502, 26, 119, 119, 0, 0, 27, 0, 338, 0, + 28, 0, 0, 121, 0, 0, 0, 342, 0, 30, + 0, 0, 1502, 0, 0, 0, 32, 0, 338, 0, + 0, 33, 338, 0, 0, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 357, 40, 0, 38, 0, 40, 0, 0, 0, 0, + 0, 39, 40, 0, 0, 41, 40, 0, 85, 0, + 0, 40, 0, 0, 0, 40, 0, 0, 40, 342, + 119, 342, 0, 0, 0, 0, 0, 0, 342, 0, + 40, 40, 0, 0, 0, 40, 40, 342, 342, 987, + 342, 40, 338, 40, 40, 40, 40, 0, 0, 0, + 0, 40, 0, 0, 0, 40, 0, 40, 0, 1089, + 338, 338, 0, 53, 0, 342, 0, 40, 342, 40, + 40, 0, 40, 0, 53, 0, 40, 0, 0, 53, + 0, 0, 0, 53, 0, 0, 53, 0, 0, 0, + 0, 0, 0, 387, 0, 0, 40, 0, 53, 53, + 0, 0, 0, 53, 53, 0, 40, 40, 0, 53, + 0, 53, 53, 53, 53, 0, 0, 0, 0, 53, + 0, 565, 0, 53, 0, 53, 565, 565, 0, 338, + 0, 0, 0, 0, 0, 53, 0, 0, 53, 0, + 53, 0, 0, 0, 53, 0, 0, 0, 0, 565, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 565, 565, 53, 338, 0, 565, 0, 0, + 565, 0, 565, 338, 565, 565, 565, 565, 588, 0, + 0, 0, 565, 0, 0, 0, 565, 0, 0, 0, + 565, 0, 0, 0, 38, 0, 0, 0, 565, 0, + 0, 565, 0, 565, 565, 0, 0, 0, 565, 565, + 0, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 0, 0, 0, 0, 1158, 565, 565, 565, + 0, 565, 565, 0, 0, 0, 565, 565, 0, 565, + 565, 565, 565, 565, 565, 565, 0, 565, 565, 0, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 0, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 0, 0, 565, 0, 565, 0, 565, + 0, 0, 565, 0, 0, 987, 987, 0, 565, 0, + 0, 0, 0, 987, 987, 987, 987, 987, 0, 987, + 987, 0, 987, 987, 987, 987, 987, 987, 987, 987, + 910, 0, 0, 0, 987, 0, 987, 987, 987, 987, + 987, 987, 0, 0, 987, 0, 0, 0, 987, 987, + 0, 987, 987, 987, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 987, 0, 987, 0, 987, 987, 0, + 0, 987, 0, 987, 987, 987, 987, 987, 987, 987, + 987, 987, 987, 987, 987, 338, 987, 0, 0, 987, + 987, 0, 0, 987, 987, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 987, 987, + 987, 987, 987, 0, 0, 987, 987, 0, 0, 0, + 987, 987, 0, 0, 987, 0, 0, 0, 0, 987, + 987, 987, 987, 987, 0, 0, 0, 987, 0, 987, + 0, 0, 0, 0, 0, 987, 987, 0, 0, 0, + 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, + 368, 38, 0, 0, 0, 38, 0, 0, 0, 0, + 987, 987, 987, 987, 338, 987, 38, 0, 0, 0, + 0, 38, 987, 0, 0, 38, 0, 0, 38, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 38, 38, 0, 0, 0, 38, 38, 0, 0, 0, + 0, 38, 0, 38, 38, 38, 38, 0, 0, 0, + 0, 38, 0, 0, 0, 38, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 0, 338, 38, 338, 0, + 38, 0, 38, 0, 0, 338, 38, 0, 0, 0, + 0, 0, 0, 0, 338, 338, 0, 338, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 38, 0, 0, + 0, 0, 338, 0, 0, 338, 910, 910, 0, 0, + 0, 0, 0, 0, 910, 910, 910, 910, 910, 0, + 910, 910, 0, 910, 910, 910, 910, 910, 910, 910, + 868, 0, 0, 0, 0, 910, 0, 910, 910, 910, + 910, 910, 910, 0, 0, 910, 0, 0, 0, 910, + 910, 0, 910, 910, 910, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 910, 0, 910, 0, 910, 910, + 0, 0, 910, 0, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 0, 910, 0, 0, + 910, 910, 0, 0, 910, 910, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, + 910, 910, 910, 910, 0, 0, 910, 910, 0, 0, + 0, 910, 910, 0, 0, 910, 0, 0, 0, 0, + 910, 910, 910, 910, 910, 0, 368, 0, 910, 0, + 910, 368, 368, 0, 0, 0, 910, 910, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, + 0, 910, 910, 910, 910, 0, 910, 368, 368, 0, + 358, 0, 368, 910, 0, 368, 0, 368, 0, 368, + 368, 368, 368, 0, 0, 0, 0, 368, 0, 0, + 0, 368, 0, 0, 0, 368, 0, 0, 0, 0, + 0, 0, 0, 368, 0, 0, 368, 0, 368, 368, + 0, 0, 0, 368, 368, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 0, 0, + 0, 0, 368, 368, 0, 0, 368, 368, 0, 0, + 0, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 0, 368, 368, 0, 0, 368, 368, 368, 368, + 368, 0, 0, 368, 368, 0, 0, 0, 368, 368, + 368, 368, 368, 368, 368, 368, 868, 0, 0, 0, + 0, 868, 868, 0, 0, 0, 0, 368, 0, 0, + 368, 0, 368, 0, 368, 368, 0, 368, 0, 0, + 0, 368, 368, 368, 868, 0, 0, 0, 0, 368, + 0, 368, 0, 368, 368, 368, 368, 868, 868, 0, + 398, 0, 868, 0, 0, 868, 0, 868, 368, 868, + 868, 868, 868, 0, 368, 368, 0, 868, 0, 0, + 0, 868, 0, 0, 0, 868, 0, 0, 0, 0, + 0, 0, 0, 868, 368, 0, 868, 0, 868, 868, + 368, 0, 368, 868, 868, 368, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 0, 0, 0, + 0, 0, 868, 868, 0, 0, 868, 868, 0, 0, + 0, 868, 868, 868, 868, 868, 868, 0, 868, 868, + 868, 0, 868, 868, 0, 0, 868, 868, 868, 868, + 0, 0, 0, 868, 868, 0, 0, 0, 868, 868, + 868, 868, 868, 868, 868, 868, 358, 0, 368, 0, + 0, 358, 358, 0, 0, 0, 0, 868, 0, 0, + 868, 0, 868, 0, 868, 0, 0, 868, 0, 0, + 0, 0, 0, 868, 358, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 358, 358, 0, + 0, 0, 358, 0, 0, 358, 0, 358, 0, 358, + 358, 358, 358, 0, 0, 0, 0, 358, 0, 0, + 0, 358, 0, 0, 0, 358, 0, 0, 0, 0, + 0, 0, 0, 358, 0, 0, 358, 0, 358, 358, + 0, 0, 0, 358, 358, 0, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 0, 0, 0, + 0, 0, 358, 358, 0, 0, 358, 358, 0, 0, + 0, 358, 358, 358, 358, 358, 358, 0, 358, 358, + 358, 0, 358, 358, 0, 0, 358, 358, 358, 358, + 0, 0, 0, 358, 358, 0, 0, 0, 358, 358, + 358, 358, 358, 358, 358, 358, 398, 0, 403, 0, + 0, 398, 398, 0, 0, 0, 0, 358, 0, 0, + 358, 0, 358, 0, 358, 0, 0, 358, 0, 0, + 0, 0, 0, 358, 398, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 398, 398, 0, + 0, 0, 398, 0, 0, 398, 0, 398, 0, 398, + 398, 398, 398, 0, 0, 0, 0, 398, 0, 0, + 0, 398, 0, 0, 0, 398, 0, 0, 0, 0, + 0, 0, 0, 398, 0, 0, 398, 0, 398, 398, + 0, 0, 0, 398, 398, 0, 398, 398, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 0, 0, 0, + 0, 0, 398, 398, 368, 0, 398, 398, 0, 0, + 368, 398, 398, 0, 398, 398, 398, 0, 398, 398, + 398, 0, 398, 398, 0, 0, 398, 398, 398, 398, + 0, 0, 0, 398, 398, 0, 0, 0, 398, 398, + 398, 398, 398, 398, 398, 398, 368, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, + 398, 0, 398, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, + 0, 368, 368, 0, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 0, 0, 0, 0, + 0, 368, 698, 0, 368, 368, 0, 0, 0, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, + 368, 368, 0, 0, 368, 368, 368, 368, 368, 0, + 0, 368, 368, 0, 0, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 403, 0, 0, 0, 0, 0, + 403, 0, 0, 0, 0, 368, 0, 0, 368, 27, + 368, 0, 368, 0, 0, 368, 0, 0, 0, 0, + 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 698, 403, 0, 0, 0, + 698, 0, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 698, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 698, 698, 0, 0, 0, 0, 698, 0, + 698, 0, 698, 0, 698, 698, 698, 403, 0, 0, + 0, 403, 403, 0, 403, 403, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 0, 0, 0, 0, 0, + 0, 403, 0, 53, 403, 403, 0, 0, 0, 403, + 403, 403, 403, 403, 403, 0, 403, 403, 403, 0, + 403, 403, 0, 0, 403, 403, 403, 403, 0, 698, + 0, 403, 403, 0, 0, 0, 403, 403, 403, 403, + 403, 403, 403, 403, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 403, 0, 0, 403, 0, + 403, 0, 403, 33, 33, 403, 0, 0, 33, 0, + 0, 403, 33, 0, 33, 0, 0, 33, 0, 33, + 33, 0, 33, 0, 33, 0, 33, 0, 33, 33, + 33, 33, 0, 0, 33, 33, 0, 1090, 0, 0, + 33, 0, 33, 33, 33, 0, 0, 33, 33, 33, + 0, 33, 0, 0, 33, 0, 33, 33, 33, 33, + 0, 0, 0, 33, 33, 33, 0, 0, 33, 33, + 33, 0, 0, 0, 0, 0, 0, 33, 33, 0, + 33, 33, 0, 33, 33, 33, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 27, 0, 0, 33, + 27, 0, 0, 0, 0, 0, 0, 0, 33, 33, + 33, 27, 0, 0, 0, 0, 27, 0, 33, 0, + 27, 0, 0, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 27, 0, 0, 0, + 27, 27, 0, 37, 0, 0, 27, 37, 27, 27, + 27, 27, 0, 0, 0, 0, 27, 0, 37, 33, + 27, 0, 27, 37, 0, 0, 0, 37, 0, 0, + 37, 0, 27, 0, 0, 27, 0, 27, 0, 0, + 0, 27, 37, 37, 0, 0, 0, 37, 37, 0, + 53, 0, 0, 37, 53, 37, 37, 37, 37, 0, + 0, 27, 0, 37, 0, 53, 0, 37, 0, 37, + 53, 27, 27, 0, 53, 0, 0, 53, 0, 37, + 0, 0, 37, 0, 37, 0, 0, 0, 37, 53, + 53, 0, 0, 0, 53, 53, 0, 7, 0, 0, + 53, 54, 53, 53, 53, 53, 0, 0, 37, 0, + 53, 0, 54, 0, 53, 0, 53, 54, 0, 37, + 0, 54, 0, 0, 54, 0, 53, 0, 0, 53, + 0, 53, 0, 0, 0, 53, 54, 54, 0, 0, + 0, 54, 54, 0, 1090, 0, 0, 54, 53, 54, + 54, 54, 54, 0, 0, 53, 0, 54, 0, 53, + 0, 54, 0, 54, 53, 0, 0, 0, 53, 0, + 0, 53, 0, 54, 0, 0, 54, 0, 54, 0, + 0, 0, 54, 53, 53, 0, 0, 0, 53, 53, + 0, 0, 0, 0, 53, 0, 53, 53, 53, 53, + 0, 0, 54, 0, 53, 0, 0, 54, 53, 0, + 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 0, 54, 53, 0, 53, 0, 54, 0, 53, + 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 54, 0, 53, + 0, 54, 54, 0, 0, 0, 0, 54, 0, 54, + 54, 54, 54, 0, 0, 0, 0, 54, 0, 0, + 0, 54, 0, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 56, 54, 0, 54, 0, + 0, 0, 54, 57, 24, 58, 25, 0, 0, 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, 0, - 0, 0, 52, 0, 65, 0, 66, 30, 67, 68, + 0, 0, 54, 0, 65, 0, 66, 30, 67, 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 36, 0, 37, 75, 0, 0, 38, 0, 76, 77, 78, 79, 80, 81, 39, 40, 82, 83, 41, 84, 0, 85, 0, 0, 86, - 87, 0, 0, 88, 89, 836, 0, 0, 0, 477, - 0, 836, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 0, 0, 0, 0, 95, 0, 0, - 0, 96, 478, 0, 0, 0, 97, 98, 99, 100, - 101, 0, 0, 0, 102, 479, 103, 836, 0, 0, - 481, 0, 104, 105, 0, 482, 0, 483, 484, 485, - 486, 0, 0, 0, 0, 487, 0, 0, 0, 488, - 0, 0, 0, 1434, 0, 0, 0, 106, 107, 108, - 109, 489, 0, 0, 490, 0, 491, 0, 836, 200, - 0, 0, 0, 836, 627, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 0, 0, 0, - 492, 0, 836, 836, 0, 0, 0, 0, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 0, 836, 836, - 0, 836, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 0, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 0, 836, 1436, 836, 0, - 836, 836, 836, 836, 0, 0, 0, 627, 0, 836, - 0, 0, 627, 0, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 627, 836, 627, - 0, 627, 0, 627, 627, 627, 0, 0, 0, 0, - 0, 627, 627, 627, 627, 0, 0, 0, 627, 627, - 0, 0, 0, 627, 627, 627, 627, 627, 627, 627, - 627, 0, 0, 0, 0, 0, 0, 0, 0, 836, - 0, 0, 627, 0, 836, 0, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 627, 0, - 0, 0, 0, 836, 836, 0, 0, 0, 0, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 0, 836, - 836, 0, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 0, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 364, 991, 0, 836, - 0, 836, 364, 0, 836, 0, 24, 0, 25, 0, - 836, 26, 0, 0, 0, 0, 27, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 364, 0, - 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, - 0, 39, 40, 0, 0, 41, 0, 0, 85, 364, - 0, 0, 0, 0, 364, 0, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 0, 0, - 0, 0, 0, 364, 364, 0, 0, 0, 0, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 0, 364, - 364, 0, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 0, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 0, 547, 1135, 0, 364, - 380, 364, 547, 0, 364, 0, 24, 0, 25, 0, - 364, 26, 0, 0, 0, 0, 27, 0, 0, 0, + 87, 0, 0, 88, 89, 0, 871, 0, 0, 0, + 0, 0, 871, 0, 0, 0, 0, 0, 90, 91, + 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, + 97, 0, 0, 0, 98, 0, 0, 0, 0, 99, + 100, 101, 102, 103, 0, 0, 0, 104, 871, 105, + 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 426, 0, 0, 0, 0, 0, 426, + 108, 109, 110, 111, 0, 0, 0, 0, 0, 871, + 0, 0, 200, 0, 871, 0, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 0, 0, + 0, 0, 0, 871, 871, 426, 871, 871, 0, 0, + 0, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 0, 871, 871, 0, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 0, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 0, + 871, 0, 871, 0, 871, 871, 871, 871, 0, 0, + 358, 426, 0, 871, 0, 0, 0, 0, 0, 426, + 358, 0, 426, 426, 426, 426, 0, 426, 0, 426, + 426, 0, 426, 426, 426, 426, 426, 0, 426, 426, + 426, 426, 871, 426, 426, 426, 426, 426, 426, 426, + 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, + 426, 426, 426, 426, 426, 0, 0, 0, 0, 358, + 0, 426, 0, 0, 426, 0, 0, 0, 0, 0, + 426, 0, 0, 871, 0, 0, 0, 0, 871, 0, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 0, 0, 0, 0, 0, 871, 871, 0, + 871, 871, 0, 0, 0, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 1081, 871, 871, 0, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 0, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 368, 0, 0, 871, 0, 871, 368, + 0, 871, 0, 0, 0, 0, 0, 871, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 368, 0, 0, 1081, 0, + 0, 0, 0, 1081, 0, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1081, 1081, 0, 0, 0, + 0, 1081, 0, 1081, 0, 1081, 368, 1081, 1081, 1081, + 0, 368, 0, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 0, 0, 0, 0, 0, + 368, 368, 0, 368, 368, 0, 0, 0, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 0, 368, + 368, 0, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 1081, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 0, 368, 1187, 0, 368, + 0, 368, 368, 0, 368, 0, 24, 0, 25, 0, + 368, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 547, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 368, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, - 0, 39, 40, 0, 0, 41, 0, 0, 85, 547, - 0, 0, 0, 0, 547, 0, 547, 547, 547, 547, - 547, 547, 547, 547, 547, 547, 547, 0, 0, 0, - 0, 0, 0, 547, 547, 0, 0, 0, 547, 547, - 547, 547, 547, 547, 547, 547, 547, 547, 0, 547, - 547, 0, 547, 547, 547, 547, 547, 547, 547, 547, - 547, 547, 0, 547, 547, 547, 547, 547, 547, 547, - 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, - 547, 547, 547, 547, 547, 0, 543, 0, 0, 547, - 380, 547, 543, 0, 0, 477, 0, 0, 0, 0, - 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, - 0, 479, 0, 0, 0, 0, 481, 0, 0, 0, - 0, 482, 0, 483, 484, 485, 486, 0, 0, 0, - 0, 487, 0, 0, 0, 488, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 489, 0, 543, - 490, 0, 491, 0, 543, 0, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 0, 0, 0, - 0, 0, 0, 543, 543, 0, 492, 0, 543, 543, - 0, 543, 543, 543, 543, 543, 543, 543, 0, 543, - 543, 0, 543, 543, 543, 543, 543, 543, 543, 543, - 543, 543, 0, 543, 543, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 0, 551, 0, 0, 543, - 386, 543, 551, 1453, 543, 0, 0, 0, 0, 0, - 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 386, 0, 551, 0, - 0, 386, 0, 0, 254, 0, 386, 0, 386, 386, - 386, 386, 0, 0, 0, 0, 386, 0, 0, 0, - 386, 0, 0, 0, 386, 0, 0, 0, 0, 0, - 0, 0, 386, 0, 0, 386, 0, 386, 0, 551, - 0, 0, 0, 0, 551, 0, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 0, 0, 0, - 0, 386, 0, 551, 551, 0, 0, 0, 386, 551, - 0, 551, 551, 551, 551, 551, 551, 551, 0, 551, - 551, 0, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 0, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 0, 364, 0, 386, 551, - 385, 551, 364, 0, 551, 0, 0, 0, 0, 0, - 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 0, 364, 0, - 0, 385, 0, 0, 253, 0, 385, 0, 385, 385, - 385, 385, 0, 0, 0, 0, 385, 0, 0, 0, - 385, 0, 0, 0, 385, 0, 0, 0, 0, 0, - 0, 0, 385, 0, 0, 385, 0, 385, 0, 364, - 0, 0, 0, 0, 364, 0, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 0, 0, 0, - 0, 385, 0, 364, 364, 0, 0, 0, 385, 364, - 0, 364, 364, 364, 364, 364, 364, 364, 0, 364, - 364, 0, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 0, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 0, 471, 0, 385, 364, - 0, 364, 471, 0, 364, 0, 732, 0, 732, 0, - 364, 732, 0, 732, 732, 0, 732, 0, 732, 0, - 732, 0, 732, 732, 732, 0, 0, 0, 732, 732, - 0, 0, 0, 0, 732, 0, 732, 732, 471, 0, - 0, 732, 0, 0, 0, 732, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 732, 0, 732, - 0, 0, 0, 732, 732, 0, 0, 0, 0, 0, - 0, 732, 732, 0, 0, 732, 0, 0, 732, 471, - 0, 0, 0, 732, 471, 0, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 0, 0, 0, - 0, 0, 0, 471, 471, 0, 0, 0, 0, 471, - 0, 471, 471, 471, 471, 471, 471, 471, 0, 471, - 471, 0, 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 0, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 0, 578, 0, 0, 471, - 732, 471, 578, 0, 471, 0, 24, 0, 25, 0, - 471, 26, 0, 0, 1399, 0, 27, 0, 757, 0, - 28, 0, 758, 1400, 1401, 0, 0, 0, 1402, 30, - 0, 0, 0, 0, 1403, 0, 32, 0, 578, 0, - 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 364, 0, 0, 38, 0, 0, 364, 0, 0, 0, - 836, 39, 40, 0, 0, 41, 0, 0, 1404, 578, - 0, 0, 0, 1405, 578, 0, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 0, 0, 0, - 0, 0, 364, 578, 0, 0, 0, 0, 0, 578, - 0, 578, 0, 578, 0, 578, 578, 578, 836, 578, - 578, 0, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 0, 0, 0, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 0, 578, 663, 0, 0, 0, 578, - 1407, 364, 0, 0, 0, 0, 0, 364, 364, 0, - 578, 0, 0, 364, 364, 364, 364, 364, 364, 364, - 836, 364, 0, 364, 364, 205, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 0, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 0, - 354, 0, 0, 364, 0, 364, 354, 206, 364, 0, - 0, 0, 0, 0, 364, 0, 0, 0, 663, 0, - 0, 0, 0, 663, 0, 663, 663, 663, 663, 663, - 663, 663, 663, 663, 663, 663, 0, 0, 0, 0, - 0, 0, 354, 0, 0, 0, 0, 0, 663, 0, - 663, 0, 663, 0, 663, 663, 663, 0, 207, 208, - 209, 210, 0, 211, 212, 213, 214, 215, 216, 217, - 218, 0, 0, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 0, 354, 0, 0, 0, 0, 354, 0, - 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - 354, 0, 0, 0, 0, 620, 0, 354, 422, 663, - 0, 620, 0, 354, 354, 354, 422, 354, 422, 354, - 354, 354, 0, 354, 354, 0, 0, 354, 354, 354, - 354, 0, 0, 0, 354, 354, 0, 422, 422, 354, - 354, 354, 354, 354, 354, 354, 354, 620, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 422, 354, 0, - 0, 0, 0, 354, 422, 422, 0, 0, 422, 0, - 422, 0, 0, 0, 354, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, - 0, 0, 0, 620, 0, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 422, 0, 0, 0, - 0, 0, 620, 423, 0, 0, 0, 0, 620, 0, - 620, 423, 620, 423, 620, 620, 620, 0, 620, 620, - 0, 0, 620, 620, 620, 620, 0, 0, 0, 620, - 620, 0, 423, 423, 620, 620, 620, 620, 620, 620, - 620, 620, 0, 354, 0, 0, 0, 0, 0, 354, - 0, 0, 423, 620, 0, 0, 0, 0, 620, 0, - 423, 354, 422, 423, 0, 0, 0, 422, 354, 620, - 422, 422, 422, 422, 0, 422, 0, 422, 422, 0, - 422, 422, 422, 422, 422, 354, 422, 422, 422, 422, - 0, 422, 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 0, 0, 0, 0, 354, 0, 422, - 0, 0, 422, 0, 0, 0, 354, 0, 422, 0, - 0, 354, 0, 354, 354, 354, 354, 354, 354, 354, - 354, 354, 354, 354, 0, 0, 0, 0, 600, 0, - 354, 0, 0, 0, 600, 0, 354, 354, 354, 0, - 354, 0, 354, 354, 354, 0, 354, 354, 0, 0, - 354, 354, 354, 354, 0, 0, 0, 354, 354, 0, - 0, 0, 354, 354, 354, 354, 354, 354, 354, 354, - 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 0, 0, 0, 354, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, - 618, 0, 0, 0, 0, 0, 618, 0, 0, 0, - 0, 600, 0, 0, 0, 0, 600, 0, 600, 600, - 600, 600, 600, 600, 600, 600, 600, 600, 600, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 600, 618, 600, 0, 600, 0, 600, 600, 600, - 0, 600, 600, 0, 0, 600, 600, 600, 600, 600, - 600, 600, 600, 600, 0, 0, 0, 600, 600, 600, - 600, 600, 600, 600, 600, 0, 0, 0, 0, 0, - 0, 0, 0, 618, 0, 0, 600, 0, 618, 0, - 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, - 618, 0, 600, 0, 0, 607, 0, 618, 0, 0, - 0, 607, 0, 618, 0, 618, 0, 618, 0, 618, - 618, 618, 0, 618, 618, 0, 0, 618, 618, 618, - 618, 0, 0, 0, 618, 618, 0, 0, 0, 618, - 618, 618, 618, 618, 618, 618, 618, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, - 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 618, 0, 0, 958, 0, 0, - 0, 0, 0, 958, 0, 0, 0, 0, 607, 0, - 0, 0, 0, 607, 0, 607, 607, 607, 607, 607, - 607, 607, 607, 607, 607, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 958, - 607, 0, 607, 0, 607, 607, 607, 0, 607, 607, - 0, 0, 607, 607, 607, 607, 0, 0, 0, 607, - 607, 0, 0, 0, 607, 607, 607, 607, 607, 607, - 607, 607, 0, 0, 0, 0, 0, 0, 0, 0, - 958, 0, 0, 607, 0, 958, 0, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, 0, 607, - 0, 0, 608, 0, 0, 0, 0, 0, 608, 0, - 958, 0, 958, 0, 958, 0, 958, 958, 958, 0, - 958, 958, 0, 0, 958, 958, 958, 958, 0, 0, - 0, 958, 958, 0, 0, 0, 958, 958, 958, 958, - 958, 958, 958, 958, 608, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 958, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 958, 0, 0, 609, 0, 0, 0, 0, 0, - 609, 0, 0, 0, 0, 608, 0, 0, 0, 0, - 608, 0, 608, 608, 608, 608, 608, 608, 608, 608, - 608, 608, 608, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 609, 608, 0, 608, - 0, 608, 608, 608, 0, 608, 608, 0, 0, 608, - 608, 608, 608, 0, 0, 0, 608, 608, 0, 0, - 0, 608, 608, 608, 608, 608, 608, 608, 608, 0, - 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, - 608, 0, 609, 0, 609, 609, 609, 609, 609, 609, - 609, 609, 609, 609, 609, 0, 608, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 609, 0, 609, - 0, 609, 0, 609, 609, 609, 0, 609, 609, 0, - 0, 609, 609, 609, 609, 0, 0, 0, 609, 609, - 0, 0, 0, 609, 609, 609, 609, 609, 609, 609, - 609, 0, 525, 0, 628, 0, 0, 0, 0, 0, - 57, 24, 609, 25, 0, 0, 26, 259, 0, 0, - 0, 27, 62, 63, 0, 28, 0, 0, 609, 0, - 0, 65, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 260, 0, - 41, 0, 0, 0, 0, 0, 0, 628, 0, 629, - 0, 0, 628, 0, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 90, 91, 92, 261, 526, - 0, 0, 0, 0, 0, 0, 0, 628, 96, 628, - 0, 628, 0, 628, 628, 628, 0, 0, 0, 0, - 0, 628, 628, 628, 628, 0, 0, 0, 628, 628, - 0, 0, 0, 628, 628, 628, 628, 628, 628, 628, - 628, 0, 0, 0, 0, 0, 0, 0, 632, 0, - 0, 0, 628, 0, 106, 527, 0, 0, 0, 0, - 0, 0, 629, 0, 0, 528, 529, 629, 628, 629, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, + 0, 39, 40, 0, 0, 41, 0, 0, 85, 368, + 0, 0, 0, 0, 368, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 0, 0, + 0, 0, 0, 368, 368, 0, 368, 368, 0, 0, + 0, 0, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 0, 368, 368, 0, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 0, 567, + 0, 0, 368, 387, 368, 567, 0, 368, 0, 0, + 0, 482, 0, 368, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, + 0, 567, 0, 0, 0, 0, 0, 484, 0, 0, + 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, + 489, 490, 491, 0, 0, 0, 0, 492, 0, 0, + 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 567, 494, 0, 0, 495, 567, 496, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, + 0, 0, 693, 0, 0, 0, 0, 567, 0, 567, + 567, 0, 497, 0, 567, 567, 567, 567, 567, 567, + 567, 567, 567, 567, 0, 567, 567, 0, 567, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 0, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, + 567, 0, 563, 0, 0, 0, 0, 567, 563, 0, + 0, 0, 1513, 0, 0, 0, 567, 0, 0, 0, + 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, + 693, 0, 693, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 693, 0, 563, 0, 0, 0, 0, 0, + 0, 0, 693, 693, 0, 0, 0, 0, 693, 0, + 693, 0, 693, 0, 693, 693, 693, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 693, 0, 0, 0, 0, 563, 0, 0, 0, 0, + 563, 693, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 563, 563, 693, 0, 694, 0, 0, 0, 0, + 563, 0, 563, 563, 0, 0, 0, 563, 563, 693, + 563, 563, 563, 563, 563, 563, 563, 0, 563, 563, + 0, 563, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 0, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 563, 563, 563, 0, 571, 0, 0, 0, 0, + 563, 571, 0, 563, 0, 0, 0, 0, 0, 563, + 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, + 0, 0, 0, 694, 0, 694, 694, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 0, 571, 0, 0, + 0, 0, 0, 0, 0, 694, 694, 0, 0, 0, + 0, 694, 0, 694, 0, 694, 0, 694, 694, 694, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 694, 0, 0, 0, 0, 571, 0, + 0, 0, 0, 571, 694, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 694, 0, 696, 0, + 0, 0, 0, 571, 0, 571, 571, 0, 0, 0, + 0, 571, 694, 571, 571, 571, 571, 571, 571, 571, + 0, 571, 571, 0, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 0, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 0, 368, 0, + 0, 0, 0, 571, 368, 0, 571, 0, 0, 0, + 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, + 0, 696, 0, 0, 0, 0, 696, 0, 696, 696, + 696, 696, 696, 696, 696, 696, 696, 696, 696, 0, + 368, 0, 0, 0, 0, 0, 0, 0, 696, 696, + 0, 0, 0, 0, 696, 0, 696, 0, 696, 0, + 696, 696, 696, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, + 0, 368, 0, 0, 0, 0, 368, 0, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 368, 368, + 0, 0, 0, 0, 368, 696, 368, 368, 368, 368, + 368, 368, 368, 0, 368, 368, 0, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 0, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 0, 486, 0, 0, 390, 0, 368, 486, 0, 368, + 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 390, 0, 0, 486, 0, 390, 0, 0, 257, 0, + 390, 0, 390, 390, 390, 390, 0, 0, 0, 0, + 390, 0, 0, 0, 390, 0, 0, 0, 390, 0, + 0, 0, 0, 0, 0, 0, 390, 0, 0, 390, + 0, 390, 0, 0, 486, 0, 0, 0, 0, 486, + 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, + 486, 486, 0, 0, 0, 390, 0, 0, 0, 486, + 0, 486, 486, 0, 0, 390, 0, 486, 0, 486, + 486, 486, 486, 486, 486, 486, 0, 486, 486, 0, + 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, + 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, + 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, + 486, 486, 486, 0, 598, 390, 389, 0, 0, 486, + 598, 0, 486, 0, 0, 0, 0, 0, 486, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 389, 0, 0, 0, 598, 389, 0, 0, + 256, 0, 389, 0, 389, 389, 389, 389, 0, 0, + 0, 0, 389, 0, 0, 0, 389, 368, 0, 0, + 389, 0, 0, 368, 0, 0, 0, 871, 389, 0, + 0, 389, 0, 389, 0, 0, 0, 598, 0, 0, + 0, 0, 598, 0, 598, 598, 598, 598, 598, 598, + 598, 598, 598, 598, 598, 0, 0, 389, 0, 368, + 0, 0, 0, 0, 598, 598, 0, 389, 0, 0, + 598, 0, 598, 0, 598, 871, 598, 598, 598, 0, + 598, 598, 0, 598, 598, 598, 598, 598, 598, 598, + 598, 598, 598, 0, 0, 0, 598, 598, 598, 598, + 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, + 598, 598, 598, 598, 358, 598, 0, 389, 368, 0, + 358, 0, 0, 0, 368, 368, 0, 0, 0, 0, + 0, 598, 0, 368, 368, 368, 368, 368, 368, 368, + 871, 368, 0, 368, 368, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 358, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, + 0, 0, 0, 368, 0, 368, 0, 0, 368, 0, + 0, 0, 0, 0, 368, 0, 0, 358, 0, 0, + 0, 0, 358, 0, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 0, 0, 0, 0, 0, + 0, 358, 426, 640, 358, 358, 0, 0, 0, 640, + 358, 358, 358, 0, 358, 426, 358, 358, 358, 0, + 358, 358, 0, 0, 358, 358, 358, 358, 0, 0, + 0, 358, 358, 0, 426, 426, 358, 358, 358, 358, + 358, 358, 358, 358, 0, 640, 0, 0, 0, 0, + 0, 0, 0, 0, 426, 358, 0, 0, 0, 0, + 358, 0, 426, 0, 0, 426, 0, 0, 0, 0, + 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, + 0, 640, 0, 640, 640, 640, 640, 640, 640, 640, + 640, 640, 640, 640, 0, 0, 0, 0, 0, 0, + 0, 427, 644, 640, 640, 0, 0, 0, 644, 640, + 0, 640, 427, 640, 427, 640, 640, 640, 0, 640, + 640, 0, 0, 640, 640, 640, 640, 0, 0, 0, + 640, 640, 0, 427, 427, 640, 640, 640, 640, 640, + 640, 640, 640, 0, 644, 0, 0, 0, 0, 0, + 0, 0, 0, 427, 640, 0, 0, 0, 0, 0, + 0, 427, 0, 0, 427, 0, 0, 0, 0, 0, + 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, + 644, 0, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 644, 0, 0, 0, 0, 0, 0, 0, + 430, 643, 644, 644, 0, 0, 0, 643, 644, 0, + 644, 430, 644, 430, 644, 644, 644, 0, 644, 644, + 0, 0, 644, 644, 644, 644, 0, 0, 0, 644, + 644, 0, 430, 430, 644, 644, 644, 644, 644, 644, + 644, 644, 0, 643, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 644, 0, 0, 0, 0, 0, 0, + 430, 0, 0, 430, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 629, 0, 629, 0, 629, 0, 629, 629, - 629, 0, 0, 0, 0, 0, 629, 629, 629, 629, - 0, 0, 0, 629, 629, 0, 0, 633, 629, 629, - 629, 629, 629, 629, 629, 629, 0, 0, 0, 0, - 0, 632, 0, 0, 0, 0, 632, 629, 632, 632, - 632, 632, 632, 632, 632, 632, 632, 632, 632, 0, - 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, - 0, 632, 0, 632, 0, 632, 0, 632, 632, 632, - 0, 0, 0, 0, 0, 632, 632, 632, 632, 0, - 0, 0, 632, 632, 0, 0, 634, 0, 0, 632, - 632, 632, 632, 632, 632, 0, 0, 0, 0, 0, - 633, 0, 0, 0, 0, 633, 632, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 633, 633, 0, 0, - 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, - 633, 0, 633, 0, 633, 0, 633, 633, 633, 0, - 0, 0, 0, 0, 633, 633, 633, 633, 0, 0, - 0, 633, 633, 0, 0, 635, 0, 0, 633, 633, - 633, 633, 633, 633, 0, 0, 0, 0, 0, 634, - 0, 0, 0, 0, 634, 633, 634, 634, 634, 634, - 634, 634, 634, 634, 634, 634, 634, 0, 0, 0, - 0, 633, 0, 0, 0, 0, 0, 0, 0, 634, - 0, 634, 0, 634, 0, 634, 634, 634, 0, 0, - 0, 0, 0, 634, 634, 634, 634, 0, 0, 0, - 634, 634, 0, 0, 636, 0, 0, 634, 634, 634, - 634, 634, 634, 0, 0, 0, 0, 0, 635, 0, - 0, 0, 0, 635, 634, 635, 635, 635, 635, 635, - 635, 635, 635, 635, 635, 635, 0, 0, 0, 0, - 634, 0, 0, 0, 0, 0, 0, 0, 635, 0, - 635, 0, 635, 0, 635, 635, 635, 0, 0, 0, - 0, 0, 635, 635, 635, 635, 364, 0, 0, 635, - 635, 0, 364, 0, 0, 0, 635, 635, 635, 635, - 635, 635, 0, 0, 0, 0, 0, 636, 0, 0, - 0, 0, 636, 635, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 0, 0, 0, 364, 635, - 0, 0, 0, 0, 0, 0, 0, 636, 0, 636, - 0, 636, 0, 636, 636, 636, 0, 0, 0, 0, - 0, 636, 636, 636, 636, 0, 0, 0, 636, 636, - 0, 0, 0, 0, 0, 636, 636, 636, 636, 636, - 636, 0, 0, 641, 0, 0, 0, 0, 0, 0, - 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 364, 0, 0, 0, 636, 364, - 0, 0, 364, 0, 364, 364, 0, 0, 0, 364, - 364, 0, 0, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 0, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 642, 364, 364, 0, 0, 0, 0, 0, - 0, 364, 0, 0, 364, 0, 641, 0, 0, 0, - 364, 641, 0, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 641, 0, 641, 0, - 641, 0, 641, 641, 641, 0, 0, 0, 0, 0, - 0, 0, 641, 641, 0, 0, 0, 641, 641, 0, - 0, 643, 0, 0, 0, 0, 641, 641, 641, 641, - 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, - 642, 641, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 0, 0, 0, 0, 641, 0, 0, - 0, 0, 0, 0, 0, 642, 0, 642, 0, 642, - 0, 642, 642, 642, 0, 0, 0, 0, 0, 0, - 0, 642, 642, 0, 0, 0, 642, 642, 0, 0, - 646, 0, 0, 0, 0, 642, 642, 642, 642, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 643, - 642, 643, 643, 643, 643, 643, 643, 643, 643, 643, - 643, 643, 0, 0, 0, 0, 642, 0, 0, 0, - 0, 0, 0, 0, 643, 0, 643, 0, 643, 0, - 643, 643, 643, 0, 0, 0, 0, 0, 0, 0, - 643, 643, 0, 0, 0, 643, 643, 0, 0, 647, - 0, 0, 0, 0, 643, 643, 643, 643, 0, 0, - 0, 0, 0, 646, 0, 0, 0, 0, 646, 643, - 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, - 646, 0, 0, 0, 0, 643, 0, 0, 0, 0, - 0, 0, 0, 646, 0, 646, 0, 646, 0, 646, - 646, 646, 0, 0, 0, 0, 0, 0, 0, 646, - 646, 0, 0, 0, 646, 646, 0, 0, 649, 0, - 0, 0, 0, 0, 0, 646, 646, 0, 0, 0, - 0, 0, 647, 0, 0, 0, 0, 647, 646, 647, - 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, - 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, - 0, 0, 647, 0, 647, 0, 647, 0, 647, 647, - 647, 0, 0, 0, 0, 0, 0, 0, 647, 647, - 0, 0, 0, 647, 647, 0, 0, 650, 0, 0, - 0, 0, 0, 0, 647, 647, 0, 0, 0, 0, - 0, 649, 0, 0, 0, 0, 649, 647, 649, 649, - 649, 649, 649, 649, 649, 649, 649, 649, 649, 0, - 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, - 0, 649, 0, 649, 0, 649, 0, 649, 649, 649, - 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, - 0, 0, 649, 649, 0, 0, 652, 0, 0, 0, - 0, 0, 0, 649, 649, 0, 0, 0, 0, 0, - 650, 0, 0, 0, 0, 650, 649, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 650, 0, 0, - 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, - 650, 0, 650, 0, 650, 0, 650, 650, 650, 0, - 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, - 0, 650, 650, 0, 0, 653, 0, 0, 0, 0, - 0, 0, 650, 650, 0, 0, 0, 0, 0, 652, - 0, 0, 0, 0, 652, 650, 652, 652, 652, 652, - 652, 652, 652, 652, 652, 652, 652, 0, 0, 0, - 0, 650, 0, 0, 0, 0, 0, 0, 0, 652, - 0, 652, 0, 652, 0, 652, 652, 652, 0, 0, - 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, - 0, 652, 0, 0, 655, 0, 0, 0, 0, 0, - 0, 652, 652, 0, 0, 0, 0, 0, 653, 0, - 0, 0, 0, 653, 652, 653, 653, 653, 653, 653, - 653, 653, 653, 653, 653, 653, 0, 0, 0, 0, - 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, - 653, 0, 653, 0, 653, 653, 653, 0, 0, 0, - 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, - 653, 0, 0, 656, 0, 0, 0, 0, 0, 0, - 653, 653, 0, 0, 0, 0, 0, 655, 0, 0, - 0, 0, 655, 653, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 0, 0, 0, 0, 653, - 0, 0, 0, 0, 0, 0, 0, 655, 0, 655, - 0, 655, 0, 655, 655, 655, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 0, 0, 658, 0, 0, 0, 0, 0, 0, 655, - 655, 0, 0, 0, 0, 0, 656, 0, 0, 0, - 0, 656, 655, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 0, 0, 0, 0, 655, 0, - 0, 0, 0, 0, 0, 0, 656, 0, 656, 0, - 656, 0, 656, 656, 656, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, - 0, 659, 0, 0, 0, 0, 0, 0, 656, 656, - 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, - 658, 656, 658, 658, 658, 658, 658, 658, 658, 658, - 658, 658, 658, 0, 0, 0, 0, 656, 0, 0, - 0, 0, 0, 0, 0, 658, 0, 658, 0, 658, - 0, 658, 658, 658, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, - 0, 364, 0, 0, 0, 836, 0, 0, 658, 0, - 0, 0, 0, 0, 659, 0, 0, 0, 0, 659, - 658, 659, 659, 659, 659, 659, 659, 659, 659, 659, - 659, 659, 0, 0, 0, 0, 658, 364, 0, 0, - 0, 0, 0, 0, 659, 0, 659, 0, 659, 0, - 659, 659, 659, 836, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, - 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, - 0, 0, 364, 364, 0, 659, 0, 0, 364, 364, - 0, 364, 0, 364, 0, 836, 364, 0, 364, 364, - 0, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 0, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 0, 0, 591, 0, 364, 0, - 364, 0, 0, 364, 57, 24, 58, 25, 1164, 364, - 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, - 0, 0, 0, 0, 0, 65, 0, 66, 30, 67, - 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 74, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 76, 77, 78, 79, 80, 81, - 39, 40, 82, 83, 41, 84, 0, 85, 0, 0, - 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 93, 94, 0, 0, 0, 0, 95, 0, - 0, 0, 96, 0, 0, 0, 0, 97, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 0, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 0, 0, 0, 0, 0, 0, 0, 440, + 358, 643, 643, 0, 0, 0, 358, 643, 0, 643, + 440, 643, 440, 643, 643, 643, 0, 643, 643, 0, + 0, 643, 643, 643, 643, 0, 0, 0, 643, 643, + 0, 440, 440, 643, 643, 643, 643, 643, 643, 643, + 643, 0, 358, 0, 0, 0, 0, 0, 0, 0, + 0, 440, 643, 0, 0, 0, 0, 0, 0, 440, + 0, 0, 440, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 0, 106, 592, - 108, 109, 0, 1165, 57, 24, 58, 25, 0, 0, - 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, - 0, 0, 0, 0, 0, 65, 0, 66, 30, 67, - 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 74, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 76, 77, 78, 79, 80, 81, - 39, 40, 82, 83, 41, 84, 0, 85, 0, 0, - 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 93, 94, 0, 0, 0, 0, 95, 0, - 0, 0, 96, 0, 0, 0, 0, 97, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 358, 0, 0, 0, 0, 358, 0, + 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, + 358, 0, 0, 0, 0, 0, 0, 358, 620, 0, + 358, 358, 0, 0, 620, 0, 358, 358, 358, 0, + 358, 0, 358, 358, 358, 0, 358, 358, 0, 0, + 358, 358, 358, 358, 0, 0, 0, 358, 358, 0, + 0, 0, 358, 358, 358, 358, 358, 358, 358, 358, + 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 358, 0, 0, 0, 0, 358, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, + 862, 0, 0, 0, 0, 0, 862, 0, 0, 0, + 0, 620, 0, 0, 0, 0, 620, 0, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 620, 620, + 0, 0, 862, 0, 620, 0, 620, 0, 620, 0, + 620, 620, 620, 0, 620, 620, 0, 0, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 0, 0, 0, + 620, 620, 620, 620, 620, 620, 620, 620, 0, 0, + 0, 0, 0, 862, 0, 0, 0, 0, 862, 620, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 0, 0, 0, 0, 620, 0, 862, 627, 0, + 862, 862, 0, 0, 627, 0, 862, 0, 862, 0, + 862, 0, 862, 862, 862, 0, 862, 862, 0, 0, + 862, 862, 862, 862, 0, 0, 0, 862, 862, 0, + 0, 0, 862, 862, 862, 862, 862, 862, 862, 862, + 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 862, 0, 0, 0, 0, 862, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, + 993, 0, 0, 0, 0, 0, 993, 0, 0, 0, + 0, 627, 0, 0, 0, 0, 627, 0, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 627, 627, + 0, 0, 993, 0, 627, 0, 627, 0, 627, 0, + 627, 627, 627, 0, 627, 627, 0, 0, 627, 627, + 627, 627, 0, 0, 0, 627, 627, 0, 0, 0, + 627, 627, 627, 627, 627, 627, 627, 627, 0, 0, + 0, 0, 0, 993, 0, 0, 0, 0, 993, 627, + 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, + 993, 0, 0, 0, 0, 627, 0, 0, 628, 0, + 993, 993, 0, 0, 628, 0, 993, 0, 993, 0, + 993, 0, 993, 993, 993, 0, 993, 993, 0, 0, + 993, 993, 993, 993, 0, 0, 0, 993, 993, 0, + 0, 0, 993, 993, 993, 993, 993, 993, 993, 993, + 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 993, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, + 629, 0, 0, 0, 0, 0, 629, 0, 0, 0, + 0, 628, 0, 0, 0, 0, 628, 0, 628, 628, + 628, 628, 628, 628, 628, 628, 628, 628, 628, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 628, 628, + 0, 0, 629, 0, 628, 0, 628, 0, 628, 0, + 628, 628, 628, 0, 628, 628, 0, 0, 628, 628, + 628, 628, 0, 0, 0, 628, 628, 0, 0, 0, + 628, 628, 628, 628, 628, 628, 628, 628, 0, 0, + 0, 0, 0, 629, 0, 0, 0, 0, 629, 628, + 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, + 629, 0, 0, 0, 0, 628, 0, 0, 0, 0, + 629, 629, 0, 0, 0, 0, 629, 0, 629, 0, + 629, 0, 629, 629, 629, 0, 629, 629, 0, 0, + 629, 629, 629, 629, 0, 0, 0, 629, 629, 0, + 0, 0, 629, 629, 629, 629, 629, 629, 629, 629, + 0, 530, 0, 662, 0, 0, 0, 0, 0, 57, + 24, 629, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 629, 0, 0, + 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 106, 107, - 108, 109, 57, 24, 58, 25, 0, 0, 26, 59, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, + 0, 662, 0, 662, 662, 662, 662, 662, 662, 662, + 662, 662, 662, 662, 90, 91, 92, 262, 531, 663, + 0, 95, 96, 662, 662, 0, 0, 0, 0, 662, + 98, 662, 0, 662, 0, 662, 662, 662, 0, 0, + 0, 0, 0, 662, 662, 662, 662, 0, 0, 0, + 662, 662, 0, 0, 0, 662, 662, 662, 662, 662, + 662, 662, 662, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 662, 0, 108, 532, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 533, 534, 0, + 662, 664, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 663, 0, 0, 0, 0, 663, 0, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, + 663, 0, 0, 0, 0, 663, 0, 663, 0, 663, + 0, 663, 663, 663, 0, 0, 0, 0, 0, 663, + 663, 663, 663, 0, 0, 0, 663, 663, 0, 0, + 0, 663, 663, 663, 663, 663, 663, 663, 663, 0, + 0, 0, 0, 0, 664, 0, 0, 0, 0, 664, + 663, 664, 664, 664, 664, 664, 664, 664, 664, 664, + 664, 664, 667, 0, 0, 0, 663, 0, 0, 0, + 0, 664, 664, 0, 0, 0, 0, 664, 0, 664, + 0, 664, 0, 664, 664, 664, 0, 0, 0, 0, + 0, 664, 664, 664, 664, 0, 0, 0, 664, 664, + 0, 0, 0, 664, 664, 664, 664, 664, 664, 664, + 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 668, 0, 0, 0, 664, 0, + 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, + 667, 0, 667, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 667, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 667, 667, 0, 0, 0, 0, 667, 0, + 667, 0, 667, 0, 667, 667, 667, 0, 0, 0, + 0, 0, 667, 667, 667, 667, 0, 0, 0, 667, + 667, 0, 0, 0, 0, 0, 667, 667, 667, 667, + 667, 667, 0, 0, 0, 0, 0, 668, 0, 0, + 0, 0, 668, 667, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 669, 0, 0, 0, 667, + 0, 0, 0, 0, 668, 668, 0, 0, 0, 0, + 668, 0, 668, 0, 668, 0, 668, 668, 668, 0, + 0, 0, 0, 0, 668, 668, 668, 668, 0, 0, + 0, 668, 668, 0, 0, 0, 0, 0, 668, 668, + 668, 668, 668, 668, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, + 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, + 0, 0, 0, 669, 0, 669, 669, 669, 669, 669, + 669, 669, 669, 669, 669, 669, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 669, 669, 0, 0, 0, + 0, 669, 0, 669, 0, 669, 0, 669, 669, 669, + 0, 0, 0, 0, 0, 669, 669, 669, 669, 0, + 0, 0, 669, 669, 0, 0, 0, 0, 0, 669, + 669, 669, 669, 669, 669, 0, 0, 0, 0, 0, + 670, 0, 0, 0, 0, 670, 669, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 671, 0, + 0, 0, 669, 0, 0, 0, 0, 670, 670, 0, + 0, 0, 0, 670, 0, 670, 0, 670, 0, 670, + 670, 670, 0, 0, 0, 0, 0, 670, 670, 670, + 670, 0, 0, 0, 670, 670, 0, 0, 0, 0, + 0, 670, 670, 670, 670, 670, 670, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 368, 670, 0, + 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, + 0, 671, 0, 0, 0, 0, 671, 0, 671, 671, + 671, 671, 671, 671, 671, 671, 671, 671, 671, 368, + 0, 0, 0, 0, 0, 0, 0, 0, 671, 671, + 0, 0, 0, 0, 671, 0, 671, 0, 671, 0, + 671, 671, 671, 0, 0, 0, 0, 0, 671, 671, + 671, 671, 0, 0, 0, 671, 671, 0, 0, 0, + 0, 0, 671, 671, 671, 671, 671, 671, 676, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, + 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, + 0, 0, 0, 368, 0, 671, 368, 0, 368, 368, + 0, 0, 0, 368, 368, 0, 0, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 0, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 368, 368, 0, + 677, 0, 0, 0, 0, 368, 0, 0, 368, 0, + 0, 676, 0, 0, 368, 0, 676, 0, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 676, 676, + 0, 0, 0, 0, 676, 0, 676, 0, 676, 0, + 676, 676, 676, 0, 0, 0, 0, 0, 0, 0, + 676, 676, 0, 0, 0, 676, 676, 0, 0, 0, + 0, 0, 678, 0, 676, 676, 676, 676, 0, 0, + 0, 0, 0, 677, 0, 0, 0, 0, 677, 676, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 0, 0, 0, 0, 676, 0, 0, 0, 0, + 677, 677, 0, 0, 0, 0, 677, 0, 677, 0, + 677, 0, 677, 677, 677, 0, 0, 0, 0, 0, + 0, 0, 677, 677, 0, 0, 0, 677, 677, 0, + 0, 0, 0, 0, 681, 0, 677, 677, 677, 677, + 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, + 678, 677, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 0, 0, 0, 0, 677, 0, 0, + 0, 0, 678, 678, 0, 0, 0, 0, 678, 0, + 678, 0, 678, 0, 678, 678, 678, 0, 0, 0, + 0, 0, 0, 0, 678, 678, 0, 0, 0, 678, + 678, 0, 0, 0, 0, 0, 682, 0, 678, 678, + 678, 678, 0, 0, 0, 0, 0, 681, 0, 0, + 0, 0, 681, 678, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 0, 0, 0, 0, 678, + 0, 0, 0, 0, 681, 681, 0, 0, 0, 0, + 681, 0, 681, 0, 681, 0, 681, 681, 681, 0, + 0, 0, 0, 0, 0, 0, 681, 681, 0, 0, + 0, 681, 681, 0, 0, 0, 0, 0, 684, 0, + 0, 0, 681, 681, 0, 0, 0, 0, 0, 682, + 0, 0, 0, 0, 682, 681, 682, 682, 682, 682, + 682, 682, 682, 682, 682, 682, 682, 0, 0, 0, + 0, 681, 0, 0, 0, 0, 682, 682, 0, 0, + 0, 0, 682, 0, 682, 0, 682, 0, 682, 682, + 682, 0, 0, 0, 0, 0, 0, 0, 682, 682, + 0, 0, 0, 682, 682, 0, 0, 0, 0, 0, + 685, 0, 0, 0, 682, 682, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 0, 684, 682, 684, 684, + 684, 684, 684, 684, 684, 684, 684, 684, 684, 0, + 0, 0, 0, 682, 0, 0, 0, 0, 684, 684, + 0, 0, 0, 0, 684, 0, 684, 0, 684, 0, + 684, 684, 684, 0, 0, 0, 0, 0, 0, 0, + 0, 684, 0, 0, 0, 684, 684, 0, 0, 0, + 0, 0, 687, 0, 0, 0, 684, 684, 0, 0, + 0, 0, 0, 685, 0, 0, 0, 0, 685, 684, + 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, + 685, 0, 0, 0, 0, 684, 0, 0, 0, 0, + 685, 685, 0, 0, 0, 0, 685, 0, 685, 0, + 685, 0, 685, 685, 685, 0, 0, 0, 0, 0, + 0, 0, 0, 685, 0, 0, 0, 685, 685, 0, + 0, 0, 0, 0, 688, 0, 0, 0, 685, 685, + 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, + 687, 685, 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 0, 0, 0, 0, 685, 0, 0, + 0, 0, 687, 687, 0, 0, 0, 0, 687, 0, + 687, 0, 687, 0, 687, 687, 687, 0, 0, 0, + 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, + 687, 0, 0, 0, 0, 0, 690, 0, 0, 0, + 687, 687, 0, 0, 0, 0, 0, 688, 0, 0, + 0, 0, 688, 687, 688, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 0, 0, 0, 0, 687, + 0, 0, 0, 0, 688, 688, 0, 0, 0, 0, + 688, 0, 688, 0, 688, 0, 688, 688, 688, 0, + 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, + 0, 0, 688, 0, 0, 0, 0, 0, 691, 0, + 0, 0, 688, 688, 0, 0, 0, 0, 0, 690, + 0, 0, 0, 0, 690, 688, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 0, 0, 0, + 0, 688, 0, 0, 0, 0, 690, 690, 0, 0, + 0, 0, 690, 0, 690, 0, 690, 0, 690, 690, + 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 368, 690, 0, 0, 871, 0, 0, + 0, 0, 0, 0, 690, 690, 0, 0, 0, 0, + 0, 691, 0, 0, 0, 0, 691, 690, 691, 691, + 691, 691, 691, 691, 691, 691, 691, 691, 691, 368, + 0, 0, 0, 690, 0, 0, 0, 0, 691, 691, + 0, 0, 0, 0, 691, 871, 691, 0, 691, 0, + 691, 691, 691, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 691, 691, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 368, 691, + 0, 0, 0, 0, 368, 368, 0, 0, 0, 0, + 0, 0, 0, 368, 368, 691, 368, 0, 368, 0, + 871, 368, 0, 368, 368, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 0, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, + 0, 602, 0, 368, 0, 368, 0, 0, 368, 57, + 24, 58, 25, 1216, 368, 26, 59, 0, 60, 61, + 27, 62, 63, 64, 28, 0, 0, 0, 0, 0, + 65, 0, 66, 30, 67, 68, 69, 70, 0, 0, + 32, 0, 0, 0, 71, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 76, + 77, 78, 79, 80, 81, 39, 40, 82, 83, 41, + 84, 0, 85, 0, 0, 86, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, + 0, 95, 96, 0, 0, 0, 97, 0, 0, 0, + 98, 0, 0, 0, 0, 99, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, + 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 108, 603, 110, 111, + 0, 1217, 57, 24, 58, 25, 0, 0, 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, 0, 0, 0, 0, 0, 65, 0, 66, 30, 67, 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, 33, 0, @@ -12077,1373 +12457,1436 @@ void case_1078() 82, 83, 41, 84, 0, 85, 0, 0, 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, - 93, 94, 0, 0, 0, 0, 95, 0, 0, 0, - 96, 0, 0, 0, 0, 97, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 591, 0, 0, 0, 106, 107, 108, 109, - 57, 24, 58, 25, 0, 0, 26, 59, 0, 60, - 61, 27, 62, 63, 64, 28, 0, 0, 0, 0, - 0, 65, 0, 66, 30, 67, 68, 69, 70, 0, - 0, 32, 0, 0, 0, 71, 33, 0, 72, 73, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 0, 36, 0, 37, 75, 0, 0, 38, 0, - 76, 77, 78, 79, 80, 81, 39, 40, 82, 83, - 41, 84, 0, 85, 0, 0, 86, 87, 0, 0, - 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 91, 92, 93, 94, - 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, - 0, 0, 0, 97, 98, 99, 100, 101, 0, 0, - 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1049, 0, 0, 0, 106, 592, 108, 109, 1049, 1049, - 1049, 1049, 0, 0, 1049, 1049, 0, 1049, 1049, 1049, - 1049, 1049, 1049, 1049, 0, 0, 0, 0, 0, 1049, - 0, 1049, 1049, 1049, 1049, 1049, 1049, 0, 0, 1049, - 0, 0, 0, 1049, 1049, 0, 1049, 1049, 1049, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1049, 0, - 1049, 0, 1049, 1049, 0, 0, 1049, 0, 1049, 1049, - 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, - 0, 1049, 0, 0, 1049, 1049, 0, 0, 1049, 1049, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1049, 1049, 1049, 1049, 1049, 0, 0, - 0, 0, 1049, 0, 0, 0, 1049, 0, 0, 0, - 0, 1049, 1049, 1049, 1049, 1049, 0, 0, 0, 1049, - 0, 1049, 0, 0, 0, 0, 0, 1049, 1049, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, - 0, 0, 1049, 1049, 1049, 1049, 57, 24, 0, 25, - 0, 0, 26, 259, 0, 0, 0, 27, 62, 63, - 0, 28, 0, 0, 189, 0, 189, 65, 0, 189, - 30, 0, 0, 0, 189, 0, 0, 32, 189, 0, - 0, 0, 33, 0, 72, 73, 34, 189, 636, 0, - 0, 0, 0, 0, 189, 637, 0, 0, 36, 189, - 37, 75, 0, 189, 38, 0, 0, 77, 0, 79, - 0, 81, 39, 40, 260, 189, 41, 189, 0, 0, - 0, 189, 0, 638, 0, 0, 88, 89, 0, 189, - 189, 0, 0, 189, 0, 0, 189, 0, 0, 0, - 0, 90, 91, 92, 93, 94, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 639, 0, 0, - 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, - 0, 0, 1074, 0, 0, 104, 105, 0, 0, 0, - 0, 0, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 106, 107, 108, 109, 65, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 189, 33, + 93, 94, 0, 0, 95, 96, 0, 0, 0, 97, + 0, 0, 0, 98, 0, 0, 0, 0, 99, 100, + 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, + 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 273, 0, 0, 0, 108, + 109, 110, 111, 57, 24, 58, 25, 0, 0, 26, + 59, 0, 60, 61, 27, 62, 63, 64, 28, 0, + 0, 0, 0, 0, 65, 0, 66, 30, 67, 68, + 69, 70, 0, 0, 32, 0, 0, 0, 71, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 76, 77, 78, 79, 80, 81, 39, + 40, 82, 83, 41, 84, 0, 85, 0, 0, 86, + 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, + 97, 0, 0, 0, 98, 0, 0, 0, 0, 99, + 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, + 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, + 108, 109, 110, 111, 57, 24, 58, 25, 0, 0, + 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, + 0, 0, 0, 0, 0, 65, 0, 66, 30, 67, + 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 74, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 76, 77, 78, 79, 80, 81, + 39, 40, 82, 83, 41, 84, 0, 85, 0, 0, + 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, + 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, + 99, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1086, 0, 0, + 0, 108, 603, 110, 111, 1086, 1086, 1086, 1086, 0, + 0, 1086, 1086, 0, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, 0, 0, 0, 0, 0, 1086, 0, 1086, 1086, + 1086, 1086, 1086, 1086, 0, 0, 1086, 0, 0, 0, + 1086, 1086, 0, 1086, 1086, 1086, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1086, 0, 1086, 0, 1086, + 1086, 0, 0, 1086, 0, 1086, 1086, 1086, 1086, 1086, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 0, 1086, 0, + 0, 1086, 1086, 0, 0, 1086, 1086, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1086, 1086, 1086, 1086, 1086, 0, 0, 1086, 1086, 0, + 0, 0, 1086, 0, 0, 0, 1086, 0, 0, 0, + 0, 1086, 1086, 1086, 1086, 1086, 0, 0, 0, 1086, + 0, 1086, 0, 0, 0, 0, 0, 1086, 1086, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, + 0, 0, 1086, 1086, 1086, 1086, 57, 24, 0, 25, + 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 24, 0, 25, 65, 0, 26, + 30, 0, 0, 0, 27, 0, 0, 32, 28, 0, + 0, 0, 33, 0, 72, 73, 34, 30, 647, 0, + 0, 0, 0, 0, 32, 648, 0, 0, 36, 33, + 37, 75, 0, 34, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 261, 36, 41, 37, 0, 0, + 0, 38, 0, 649, 0, 0, 88, 89, 0, 39, + 40, 0, 0, 41, 0, 0, 85, 0, 0, 0, + 0, 90, 91, 92, 93, 94, 0, 0, 95, 96, + 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, + 650, 0, 298, 100, 101, 102, 103, 0, 0, 0, + 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, + 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, + 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 108, 109, 110, 111, 65, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 331, 33, 0, 72, 73, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, + 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 93, 815, 0, 0, 95, 96, + 0, 0, 0, 816, 1129, 0, 0, 98, 0, 0, + 0, 0, 0, 100, 101, 102, 103, 0, 0, 0, + 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, + 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, + 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 108, 817, 110, 111, 65, 0, 818, + 30, 0, 0, 0, 819, 0, 0, 32, 0, 0, + 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, + 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 93, 815, 0, 0, 95, 96, + 0, 0, 0, 816, 0, 0, 0, 98, 0, 0, + 0, 0, 0, 100, 101, 102, 103, 0, 0, 0, + 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 833, 108, 817, 110, 111, 0, 0, 818, + 57, 24, 0, 25, 819, 0, 26, 260, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 0, 192, 0, + 192, 65, 0, 192, 30, 0, 0, 0, 192, 0, + 0, 32, 192, 0, 0, 0, 33, 0, 72, 73, + 34, 192, 0, 0, 0, 0, 0, 0, 192, 0, + 0, 0, 36, 192, 37, 75, 0, 192, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 261, 192, + 41, 192, 0, 0, 0, 192, 0, 87, 0, 0, + 88, 89, 0, 192, 192, 0, 0, 192, 0, 0, + 192, 0, 0, 0, 0, 90, 91, 92, 93, 309, + 0, 0, 95, 96, 0, 0, 0, 551, 834, 0, + 0, 98, 0, 0, 0, 0, 0, 100, 101, 102, + 103, 0, 0, 0, 104, 0, 105, 0, 0, 1111, + 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1041, 0, 0, 0, 108, 310, 110, + 111, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 192, 28, 0, 0, 192, + 0, 192, 65, 0, 192, 30, 0, 0, 0, 192, + 0, 0, 32, 192, 0, 0, 0, 33, 0, 72, + 73, 34, 192, 647, 0, 0, 0, 0, 0, 192, + 648, 0, 0, 36, 192, 37, 75, 0, 192, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 192, 41, 192, 0, 0, 0, 192, 0, 649, 0, + 0, 88, 89, 0, 192, 192, 0, 0, 192, 0, + 0, 192, 0, 0, 0, 0, 90, 91, 92, 93, + 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, + 0, 0, 98, 0, 0, 0, 0, 0, 100, 101, + 102, 103, 0, 0, 0, 104, 0, 105, 1111, 0, + 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 833, 0, 0, 0, 108, 109, + 110, 111, 57, 24, 0, 25, 0, 0, 26, 260, + 0, 0, 0, 27, 62, 63, 192, 28, 0, 0, + 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, + 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, + 72, 73, 34, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 36, 33, 37, 75, 1044, 34, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 261, 36, 41, 37, 0, 0, 0, 38, 0, 87, + 0, 0, 88, 89, 0, 39, 40, 0, 0, 41, + 0, 0, 85, 0, 0, 0, 0, 90, 91, 92, + 93, 309, 0, 0, 95, 96, 0, 0, 0, 551, + 0, 0, 0, 98, 0, 0, 0, 0, 0, 100, + 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, + 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 833, 0, 0, 0, 108, + 310, 110, 111, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 387, 28, 0, + 0, 0, 0, 0, 65, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 801, 0, 0, 0, 0, 802, 1088, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, - 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, - 57, 24, 0, 25, 0, 0, 26, 259, 0, 0, - 0, 27, 62, 63, 0, 28, 0, 106, 803, 108, - 109, 65, 0, 804, 30, 0, 0, 0, 805, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 260, 0, - 41, 0, 0, 0, 0, 0, 0, 87, 0, 0, - 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 91, 92, 93, 801, - 0, 0, 0, 0, 802, 0, 0, 0, 96, 0, - 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, - 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 819, 106, 803, 108, 109, 0, 0, - 804, 57, 24, 0, 25, 805, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 189, - 0, 189, 65, 0, 189, 30, 0, 0, 0, 189, - 0, 0, 32, 189, 0, 0, 0, 33, 0, 72, - 73, 34, 189, 0, 0, 0, 0, 0, 0, 189, - 0, 0, 0, 36, 189, 37, 75, 0, 189, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 189, 41, 189, 0, 0, 0, 189, 0, 87, 0, - 0, 88, 89, 0, 189, 189, 0, 0, 189, 0, - 0, 189, 0, 0, 0, 0, 90, 91, 92, 93, - 308, 0, 0, 0, 0, 546, 820, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 1074, 0, 0, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1013, 0, 0, 0, 106, 309, 108, 109, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, - 27, 62, 63, 189, 28, 0, 0, 24, 0, 25, - 65, 0, 26, 30, 0, 0, 0, 27, 0, 0, - 32, 28, 0, 0, 0, 33, 0, 72, 73, 34, - 30, 636, 0, 0, 0, 0, 0, 32, 637, 0, - 0, 36, 33, 37, 75, 0, 34, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 36, 41, - 37, 0, 0, 0, 38, 0, 638, 0, 0, 88, - 89, 0, 39, 40, 0, 0, 41, 0, 0, 85, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, - 0, 0, 0, 106, 107, 108, 109, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 380, 28, 0, 0, 24, 0, 25, 65, 0, - 26, 30, 0, 0, 0, 27, 0, 0, 32, 28, - 0, 0, 0, 33, 0, 72, 73, 34, 30, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 36, - 33, 37, 75, 1019, 34, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 36, 41, 37, 0, - 0, 0, 38, 0, 87, 0, 0, 88, 89, 0, - 39, 40, 0, 0, 41, 0, 0, 608, 0, 0, - 0, 0, 90, 91, 92, 93, 308, 0, 0, 0, - 0, 546, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, - 0, 106, 309, 108, 109, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 380, - 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, + 92, 93, 309, 0, 0, 95, 96, 0, 0, 0, + 551, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, + 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 308, 0, 0, 0, 0, 546, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, + 108, 310, 110, 111, 352, 0, 57, 24, 0, 25, + 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 0, 0, 0, 65, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 353, 0, 33, 0, 72, 73, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 0, 106, - 309, 108, 109, 348, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 349, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 351, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 352, 0, 0, 0, 98, - 99, 100, 101, 972, 0, 0, 102, 0, 103, 811, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 93, 308, 0, 0, 0, - 0, 0, 973, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1016, 0, 0, - 0, 106, 309, 108, 109, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 24, 0, 25, 65, 0, 26, 30, - 0, 0, 0, 27, 0, 0, 32, 28, 0, 0, - 0, 33, 0, 72, 73, 34, 30, 0, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 36, 33, 37, - 75, 0, 34, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 36, 41, 37, 0, 0, 0, - 38, 0, 87, 0, 0, 88, 89, 0, 39, 40, - 0, 0, 41, 0, 0, 563, 0, 0, 0, 0, - 90, 91, 92, 93, 308, 0, 0, 0, 0, 0, - 1017, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 307, 0, 0, 0, 106, - 309, 108, 109, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 380, 28, 0, - 0, 527, 0, 527, 65, 0, 527, 30, 0, 0, - 0, 527, 0, 0, 32, 527, 0, 0, 0, 33, - 0, 72, 73, 34, 527, 0, 0, 0, 0, 0, - 0, 527, 0, 0, 0, 36, 527, 37, 75, 0, - 527, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 527, 41, 527, 0, 0, 0, 527, 0, - 87, 0, 0, 88, 89, 0, 527, 527, 0, 0, - 527, 0, 0, 527, 0, 0, 0, 0, 90, 91, - 92, 93, 308, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, - 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 316, 0, 0, 0, 106, 309, 108, - 109, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 527, 28, 0, 0, 0, - 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, + 0, 90, 91, 92, 262, 355, 0, 0, 95, 96, + 0, 0, 0, 0, 0, 0, 0, 98, 0, 356, + 0, 0, 0, 100, 101, 102, 103, 994, 0, 0, + 104, 0, 105, 825, 0, 0, 0, 0, 106, 107, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, - 308, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 309, 0, 0, 95, 96, 0, 0, 0, 0, 995, + 0, 0, 98, 0, 0, 0, 0, 0, 100, 101, + 102, 103, 0, 0, 0, 104, 0, 105, 0, 0, + 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 347, 0, 106, 309, 108, 109, 348, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 349, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 352, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 633, 0, 0, 0, 0, - 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 106, 263, 30, 109, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, - 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, - 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 811, 0, 0, 0, 106, 107, 108, - 109, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 190, - 0, 190, 65, 0, 190, 30, 0, 0, 0, 190, - 0, 0, 32, 190, 0, 0, 0, 33, 0, 72, - 73, 34, 190, 0, 0, 0, 0, 0, 0, 190, - 0, 0, 0, 36, 190, 37, 75, 0, 190, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 190, 41, 190, 0, 0, 0, 190, 0, 87, 0, - 0, 88, 89, 0, 190, 190, 0, 0, 190, 0, - 0, 190, 0, 0, 0, 0, 90, 91, 92, 93, - 308, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1126, 0, 0, 0, 106, 309, 108, 109, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, - 27, 62, 63, 190, 28, 0, 0, 189, 0, 189, - 65, 0, 189, 30, 0, 0, 0, 189, 0, 0, - 32, 189, 0, 0, 0, 33, 0, 72, 73, 34, - 189, 0, 0, 0, 0, 0, 0, 189, 0, 0, - 0, 36, 189, 37, 75, 0, 189, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 189, 41, - 189, 0, 0, 0, 189, 0, 87, 0, 0, 88, - 89, 0, 189, 189, 0, 0, 189, 0, 0, 189, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1278, - 0, 0, 0, 106, 1127, 108, 109, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 189, 28, 0, 0, 199, 0, 199, 65, 0, - 199, 30, 0, 0, 0, 199, 0, 0, 32, 199, - 0, 0, 0, 33, 0, 72, 73, 34, 199, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 36, - 199, 37, 75, 0, 199, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 199, 41, 199, 0, - 0, 0, 199, 0, 87, 0, 0, 88, 89, 0, - 199, 199, 0, 0, 199, 0, 0, 199, 0, 0, - 0, 0, 90, 91, 92, 93, 308, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, - 0, 106, 309, 108, 109, 83, 83, 0, 83, 0, - 0, 83, 83, 0, 0, 0, 83, 83, 83, 199, - 83, 0, 0, 0, 0, 0, 83, 0, 0, 83, - 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, - 0, 83, 0, 83, 83, 83, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 83, - 83, 0, 0, 83, 0, 0, 83, 0, 83, 0, - 83, 83, 83, 83, 0, 83, 0, 0, 0, 0, - 0, 0, 83, 0, 0, 83, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 0, 0, 0, 0, 0, 83, - 83, 83, 83, 0, 0, 0, 83, 0, 83, 0, - 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 0, 83, - 83, 83, 83, 348, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 349, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 1062, 0, 0, 0, 108, 310, + 110, 111, 57, 24, 0, 25, 0, 0, 26, 260, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, + 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, + 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, + 72, 73, 34, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 36, 33, 37, 75, 0, 34, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 261, 36, 41, 37, 0, 0, 0, 38, 0, 87, + 0, 0, 88, 89, 0, 39, 40, 0, 0, 41, + 0, 0, 619, 0, 0, 0, 0, 90, 91, 92, + 93, 309, 0, 0, 95, 96, 0, 0, 0, 0, + 1063, 0, 0, 98, 0, 0, 0, 0, 0, 100, + 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, + 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 308, 0, 0, 0, 108, + 310, 110, 111, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 387, 28, 0, + 0, 24, 0, 25, 65, 0, 26, 30, 0, 0, + 0, 27, 0, 0, 32, 28, 0, 0, 0, 33, + 0, 72, 73, 34, 30, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 36, 33, 37, 75, 0, + 34, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 36, 41, 37, 0, 0, 0, 38, 0, + 87, 0, 0, 88, 89, 0, 39, 40, 0, 0, + 41, 0, 0, 568, 0, 0, 0, 0, 90, 91, + 92, 93, 309, 0, 0, 95, 96, 0, 0, 0, + 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, + 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 351, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 352, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 347, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, + 108, 310, 110, 111, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 387, 28, + 0, 0, 0, 0, 0, 65, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 93, 309, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, + 0, 108, 310, 110, 111, 352, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 353, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 355, 0, 0, 95, + 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, + 356, 0, 0, 0, 100, 101, 102, 103, 0, 0, + 0, 104, 0, 105, 644, 0, 0, 0, 0, 106, + 107, 0, 57, 24, 0, 25, 0, 0, 26, 260, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, + 0, 0, 0, 65, 108, 264, 30, 111, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 261, 0, 41, 0, 0, 0, 0, 0, 0, 87, + 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 98, 0, 0, 0, 0, 0, 100, + 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, + 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 825, 0, 0, 0, 108, + 109, 110, 111, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 547, 0, 547, 65, 0, 547, 30, 0, 0, + 0, 547, 0, 0, 32, 547, 0, 0, 0, 33, + 0, 72, 73, 34, 547, 0, 0, 0, 0, 0, + 0, 547, 0, 0, 0, 36, 547, 37, 75, 0, + 547, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 547, 41, 547, 0, 0, 0, 547, 0, + 87, 0, 0, 88, 89, 0, 547, 547, 0, 0, + 547, 0, 0, 547, 0, 0, 0, 0, 90, 91, + 92, 93, 309, 0, 0, 95, 96, 0, 0, 0, + 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, + 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1178, 0, 0, 0, + 108, 310, 110, 111, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 547, 28, + 0, 0, 193, 0, 193, 65, 0, 193, 30, 0, + 0, 0, 193, 0, 0, 32, 193, 0, 0, 0, + 33, 0, 72, 73, 34, 193, 0, 0, 0, 0, + 0, 0, 193, 0, 0, 0, 36, 193, 37, 75, + 0, 193, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 193, 41, 193, 0, 0, 0, 193, + 0, 87, 0, 0, 88, 89, 0, 193, 193, 0, + 0, 193, 0, 0, 193, 0, 0, 0, 0, 90, + 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1338, 0, 0, + 0, 108, 1179, 110, 111, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 193, + 28, 0, 0, 192, 0, 192, 65, 0, 192, 30, + 0, 0, 0, 192, 0, 0, 32, 192, 0, 0, + 0, 33, 0, 72, 73, 34, 192, 0, 0, 0, + 0, 0, 0, 192, 0, 0, 0, 36, 192, 37, + 75, 0, 192, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 192, 41, 192, 0, 0, 0, + 192, 0, 87, 0, 0, 88, 89, 0, 192, 192, + 0, 0, 192, 0, 0, 192, 0, 0, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, + 0, 0, 108, 310, 110, 111, 86, 86, 0, 86, + 0, 0, 86, 86, 0, 0, 0, 86, 86, 86, + 192, 86, 0, 0, 0, 0, 0, 86, 0, 0, + 86, 0, 0, 0, 0, 0, 0, 86, 0, 0, + 0, 0, 86, 0, 86, 86, 86, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, + 86, 86, 0, 0, 86, 0, 0, 86, 0, 86, + 0, 86, 86, 86, 86, 0, 86, 0, 0, 0, + 0, 0, 0, 86, 0, 0, 86, 86, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 86, 86, 86, 86, 0, 0, 86, 86, + 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, + 0, 0, 0, 86, 86, 86, 86, 0, 0, 0, + 86, 0, 86, 0, 0, 0, 0, 0, 86, 86, + 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, + 0, 351, 0, 86, 86, 86, 86, 352, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 207, 0, 0, 0, + 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 353, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 208, 209, 210, 211, 0, 212, 213, 214, 215, 216, + 217, 218, 219, 0, 0, 220, 221, 222, 223, 224, + 225, 226, 227, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 356, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 351, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 33, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 33, 41, 0, 0, 0, 33, 0, + 0, 0, 0, 33, 0, 33, 33, 33, 33, 0, + 0, 33, 0, 33, 0, 0, 0, 33, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 33, + 0, 0, 33, 0, 33, 98, 0, 356, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 363, 0, 0, 0, 0, 106, 107, 33, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 33, 33, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 33, 0, 33, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 33, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 33, 41, + 0, 0, 0, 33, 0, 0, 0, 0, 33, 0, + 33, 33, 33, 33, 0, 0, 0, 0, 33, 0, + 0, 0, 33, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 33, 0, 0, 33, 0, 33, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 365, 0, 0, 0, + 0, 106, 107, 33, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 33, 33, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 53, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 53, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 53, 41, 0, 0, 0, 53, 0, + 0, 0, 0, 53, 0, 53, 53, 53, 53, 0, + 0, 53, 0, 53, 0, 0, 0, 53, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 53, + 0, 0, 53, 0, 53, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 367, 0, 0, 0, 0, 106, 107, 53, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 326, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 53, 0, 53, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 351, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 352, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 356, 0, 0, 0, 0, 104, 105, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, + 0, 36, 0, 37, 75, 53, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 53, 41, + 0, 0, 0, 53, 0, 0, 0, 0, 53, 0, + 53, 53, 53, 53, 0, 0, 0, 0, 53, 0, + 0, 0, 53, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 53, 0, 0, 53, 0, 53, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 369, 0, 0, 0, + 0, 106, 107, 53, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 327, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 53, 0, 53, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 53, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 53, 41, 0, 0, 0, 53, 0, + 0, 0, 0, 53, 0, 53, 53, 53, 53, 0, + 0, 53, 0, 53, 0, 0, 0, 53, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 53, + 0, 0, 53, 0, 53, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 371, 0, 0, 0, 0, 106, 107, 53, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 106, 263, 30, 109, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 482, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 483, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 484, 41, + 0, 0, 485, 486, 0, 0, 0, 0, 487, 0, + 488, 489, 490, 491, 0, 0, 0, 0, 492, 0, + 0, 0, 493, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 494, 0, 0, 495, 0, 496, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 373, 0, 0, 0, + 0, 106, 107, 497, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 482, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 483, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 484, 41, 0, 0, 0, 486, 0, + 0, 0, 0, 487, 0, 488, 489, 490, 491, 0, + 0, 0, 0, 492, 0, 0, 0, 493, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 494, + 0, 0, 495, 0, 496, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 375, 0, 0, 0, 0, 106, 107, 497, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 261, 351, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 358, 0, 0, 0, 0, 104, 105, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 106, 263, 30, 109, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 360, 0, 0, 0, 0, - 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 106, 263, 30, 109, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 377, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 261, 351, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 362, 0, 0, - 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 106, 263, 30, - 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 670, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 351, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 364, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 672, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 351, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 366, 0, 0, 0, 0, 104, 105, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 674, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 106, 263, 30, 109, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 261, 351, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 368, 0, 0, 0, 0, 104, 105, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 106, 263, 30, 109, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 370, 0, 0, 0, 0, - 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 106, 263, 30, 109, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 692, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 261, 351, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 658, 0, 0, - 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 106, 263, 30, - 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 355, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 694, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 351, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 660, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 696, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 351, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 662, 0, 0, 0, 0, 104, 105, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 699, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 106, 263, 30, 109, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 261, 351, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 675, 0, 0, 0, 0, 104, 105, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 106, 263, 30, 109, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 677, 0, 0, 0, 0, - 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 106, 263, 30, 109, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 701, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 261, 351, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 679, 0, 0, - 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 106, 263, 30, - 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 703, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 682, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 705, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 684, 0, 0, 0, 0, 104, 105, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 707, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 106, 263, 30, 109, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 261, 680, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 686, 0, 0, 0, 0, 104, 105, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 106, 263, 30, 109, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 680, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 688, 0, 0, 0, 0, - 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 106, 263, 30, 109, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 709, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 261, 680, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 690, 0, 0, - 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 106, 263, 30, - 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 711, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 692, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 713, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 694, 0, 0, 0, 0, 104, 105, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 715, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 106, 263, 30, 109, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 261, 680, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 696, 0, 0, 0, 0, 104, 105, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 106, 263, 30, 109, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 680, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 698, 0, 0, 0, 0, - 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, - 259, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 106, 263, 30, 109, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 717, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 261, 680, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 700, 0, 0, - 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 0, 0, 65, 106, 263, 30, - 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 719, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 261, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 702, - 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, - 263, 30, 109, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 721, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 704, 0, 0, 0, 0, 104, 105, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, + 105, 889, 0, 0, 0, 0, 106, 107, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 106, 263, 30, 109, 0, 0, 0, 0, 0, + 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 261, 680, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 869, 0, 0, 0, 0, 104, 105, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 106, 263, 30, 109, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 0, 0, 0, 0, 210, 0, - 0, 0, 210, 0, 210, 106, 263, 210, 109, 210, - 210, 0, 210, 0, 210, 0, 210, 0, 210, 210, - 210, 210, 0, 0, 210, 210, 0, 0, 0, 0, - 210, 0, 210, 210, 210, 0, 0, 210, 0, 210, - 0, 210, 0, 0, 210, 0, 210, 210, 210, 210, - 0, 0, 0, 210, 210, 210, 0, 0, 210, 210, - 210, 0, 0, 0, 0, 0, 0, 210, 210, 0, - 210, 210, 666, 210, 210, 210, 0, 0, 0, 210, - 57, 24, 0, 25, 0, 0, 26, 259, 0, 0, - 0, 27, 62, 63, 0, 28, 0, 0, 0, 210, - 0, 65, 0, 0, 30, 210, 210, 210, 0, 0, - 0, 32, 0, 0, 0, 210, 33, 0, 72, 73, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 260, 0, - 41, 0, 0, 85, 0, 0, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 91, 92, 261, 262, - 0, 0, 0, 525, 0, 0, 0, 0, 96, 0, - 364, 57, 24, 0, 25, 667, 668, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 0, 0, 30, 0, 0, 0, 51, - 0, 51, 32, 0, 0, 0, 364, 33, 0, 72, - 73, 34, 0, 0, 106, 263, 0, 0, 0, 0, - 0, 0, 51, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 51, 81, 39, 40, 260, - 51, 41, 0, 0, 0, 51, 0, 51, 51, 51, - 51, 0, 0, 51, 0, 51, 0, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 261, - 526, 51, 364, 0, 51, 0, 51, 0, 0, 96, - 364, 364, 364, 364, 836, 0, 0, 364, 364, 0, - 0, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 51, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 0, 0, 106, 527, 0, 0, 364, - 0, 52, 364, 52, 0, 52, 0, 52, 0, 0, - 52, 0, 52, 52, 0, 52, 0, 52, 0, 52, - 0, 52, 52, 52, 52, 0, 0, 52, 52, 0, - 0, 0, 0, 52, 52, 52, 52, 52, 0, 0, - 52, 0, 52, 0, 52, 0, 52, 52, 0, 52, - 52, 52, 52, 0, 0, 52, 52, 52, 52, 0, - 0, 52, 52, 52, 0, 0, 0, 0, 0, 0, - 52, 52, 0, 52, 52, 0, 52, 52, 52, 0, - 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 0, 0, 52, 52, 51, 0, 0, - 0, 51, 0, 51, 0, 0, 51, 0, 51, 51, - 0, 51, 0, 51, 0, 51, 0, 51, 51, 51, - 51, 0, 0, 51, 51, 0, 0, 0, 0, 51, - 0, 51, 51, 51, 0, 0, 51, 0, 51, 0, - 51, 0, 0, 51, 0, 51, 51, 51, 51, 52, - 0, 0, 51, 51, 51, 0, 0, 51, 51, 51, - 0, 0, 0, 0, 0, 0, 51, 51, 0, 51, - 51, 0, 51, 51, 51, 0, 0, 0, 51, 0, - 0, 51, 0, 0, 0, 51, 0, 51, 0, 0, - 51, 0, 51, 51, 0, 51, 0, 51, 51, 51, - 0, 51, 51, 51, 51, 86, 0, 51, 51, 0, - 0, 0, 0, 51, 51, 51, 51, 51, 0, 0, - 51, 0, 51, 0, 51, 0, 0, 51, 0, 51, - 51, 51, 51, 0, 0, 0, 51, 51, 51, 0, - 0, 51, 51, 51, 0, 0, 0, 0, 0, 0, - 51, 51, 0, 51, 51, 51, 51, 51, 51, 0, - 0, 0, 51, 0, 0, 52, 0, 0, 0, 52, - 0, 52, 0, 0, 52, 0, 52, 52, 0, 52, - 0, 52, 51, 52, 0, 52, 52, 52, 52, 87, - 0, 52, 52, 0, 0, 0, 0, 52, 51, 52, - 52, 52, 0, 0, 52, 0, 52, 0, 52, 0, - 0, 52, 0, 52, 52, 52, 52, 0, 0, 0, - 52, 52, 52, 0, 0, 52, 52, 52, 0, 0, - 0, 0, 0, 0, 52, 52, 0, 52, 52, 51, - 52, 52, 52, 0, 0, 0, 52, 0, 0, 51, - 0, 0, 0, 51, 0, 51, 0, 0, 51, 0, - 51, 51, 0, 51, 0, 51, 52, 51, 0, 51, - 51, 51, 51, 0, 0, 51, 51, 0, 0, 0, - 0, 51, 52, 51, 51, 51, 0, 0, 51, 0, - 51, 0, 51, 0, 0, 51, 0, 51, 51, 51, - 51, 0, 0, 0, 51, 51, 51, 0, 0, 51, - 51, 51, 0, 0, 0, 0, 0, 0, 51, 51, - 0, 51, 51, 52, 51, 51, 51, 0, 0, 0, - 51, 0, 0, 51, 0, 0, 0, 51, 0, 51, - 0, 0, 51, 0, 51, 51, 0, 51, 0, 51, - 51, 51, 0, 51, 51, 51, 51, 238, 0, 51, - 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, - 0, 0, 51, 0, 51, 364, 51, 0, 0, 51, - 0, 51, 51, 51, 51, 0, 0, 0, 51, 51, - 51, 0, 0, 51, 51, 51, 0, 0, 364, 0, - 0, 0, 51, 51, 0, 51, 51, 51, 51, 51, - 51, 364, 0, 0, 51, 0, 364, 0, 0, 364, - 0, 364, 0, 364, 364, 364, 364, 0, 0, 0, - 0, 364, 0, 0, 51, 364, 0, 0, 0, 364, - 0, 239, 0, 0, 0, 0, 0, 364, 0, 0, - 364, 0, 364, 0, 57, 24, 0, 25, 0, 0, - 26, 259, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 364, 0, 0, 0, 65, 364, 0, 30, 0, - 0, 0, 0, 364, 364, 32, 287, 0, 364, 0, - 33, 51, 72, 73, 34, 0, 636, 0, 0, 0, - 0, 364, 0, 637, 0, 0, 36, 0, 37, 75, + 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, + 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, + 0, 0, 0, 104, 0, 105, 678, 0, 0, 0, + 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 260, 0, 41, 0, 0, 0, 0, 0, - 0, 638, 0, 364, 88, 89, 0, 0, 0, 0, + 39, 40, 261, 0, 41, 0, 0, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 93, 94, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 1011, 0, 639, 0, 0, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, - 0, 57, 24, 0, 25, 0, 0, 26, 259, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 106, 107, - 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 636, 0, 0, 0, 0, 0, 0, - 637, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 260, - 0, 41, 0, 0, 0, 0, 0, 0, 638, 0, - 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, - 94, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 639, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 57, 24, - 0, 25, 0, 0, 26, 259, 0, 0, 0, 27, - 62, 63, 0, 28, 0, 106, 107, 108, 109, 65, - 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 91, 92, 262, 263, 0, 0, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 0, 679, 680, 0, 0, 213, 0, 0, 0, + 681, 213, 0, 0, 0, 213, 0, 213, 0, 0, + 213, 0, 213, 213, 0, 213, 0, 213, 0, 213, + 0, 213, 213, 213, 213, 0, 0, 213, 213, 0, + 0, 108, 264, 213, 682, 213, 213, 213, 0, 0, + 213, 0, 213, 0, 213, 0, 0, 213, 0, 213, + 213, 213, 213, 0, 0, 0, 213, 213, 213, 0, + 0, 213, 213, 213, 0, 0, 0, 0, 0, 0, + 213, 213, 0, 213, 213, 0, 213, 213, 213, 0, + 0, 0, 213, 0, 0, 530, 0, 0, 0, 0, + 0, 0, 368, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 213, 0, 27, 62, 63, 0, 28, 0, + 0, 213, 213, 213, 65, 0, 0, 30, 0, 0, + 0, 213, 0, 0, 32, 0, 0, 0, 368, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 213, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 531, 0, 368, 95, 96, 0, 0, 0, + 0, 0, 0, 0, 98, 368, 368, 368, 368, 871, + 0, 0, 368, 368, 0, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 0, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 0, 0, + 108, 532, 0, 0, 368, 0, 54, 368, 54, 0, + 54, 0, 54, 0, 0, 54, 0, 54, 54, 0, + 54, 0, 54, 0, 54, 0, 54, 54, 54, 54, + 0, 0, 54, 54, 0, 0, 0, 0, 54, 54, + 54, 54, 54, 0, 0, 54, 0, 54, 0, 54, + 0, 54, 54, 0, 54, 54, 54, 54, 0, 0, + 54, 54, 54, 54, 0, 0, 54, 54, 54, 0, + 0, 0, 0, 0, 0, 54, 54, 0, 54, 54, + 0, 54, 54, 54, 0, 0, 0, 54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, + 0, 0, 0, 54, 54, 53, 0, 0, 0, 53, + 0, 53, 0, 0, 53, 0, 53, 53, 0, 53, + 0, 53, 0, 53, 0, 53, 53, 53, 53, 0, + 0, 53, 53, 0, 0, 0, 0, 53, 0, 53, + 53, 53, 0, 0, 53, 0, 53, 0, 53, 0, + 0, 53, 0, 53, 53, 53, 53, 54, 0, 0, + 53, 53, 53, 0, 0, 53, 53, 53, 0, 0, + 0, 0, 0, 0, 53, 53, 0, 53, 53, 0, + 53, 53, 53, 0, 0, 0, 53, 53, 0, 0, + 0, 53, 0, 53, 0, 0, 53, 0, 53, 53, + 0, 53, 0, 53, 0, 53, 53, 53, 53, 53, + 53, 0, 0, 53, 53, 0, 89, 0, 0, 53, + 0, 53, 53, 53, 0, 53, 53, 0, 53, 0, + 53, 0, 0, 53, 0, 53, 53, 53, 53, 0, + 0, 0, 53, 53, 53, 0, 0, 53, 53, 53, + 0, 0, 0, 0, 0, 0, 53, 53, 0, 53, + 53, 0, 53, 53, 53, 0, 53, 0, 53, 54, + 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, + 54, 54, 0, 54, 0, 54, 0, 54, 53, 54, + 54, 54, 54, 0, 0, 54, 54, 0, 90, 0, + 0, 54, 0, 54, 54, 54, 0, 53, 54, 0, + 54, 0, 54, 0, 0, 54, 0, 54, 54, 54, + 54, 0, 0, 0, 54, 54, 54, 0, 0, 54, + 54, 54, 0, 0, 0, 0, 0, 0, 54, 54, + 0, 54, 54, 0, 54, 54, 54, 0, 53, 0, + 54, 53, 0, 0, 0, 53, 0, 53, 0, 0, + 53, 0, 53, 53, 0, 53, 0, 53, 0, 53, + 54, 53, 53, 53, 53, 0, 0, 53, 53, 0, + 0, 0, 0, 53, 0, 53, 53, 53, 0, 54, + 53, 0, 53, 0, 53, 0, 0, 53, 0, 53, + 53, 53, 53, 0, 0, 0, 53, 53, 53, 0, + 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, + 53, 53, 0, 53, 53, 0, 53, 53, 53, 0, + 54, 0, 53, 53, 0, 0, 0, 53, 0, 53, + 0, 0, 53, 0, 53, 53, 0, 53, 0, 53, + 0, 53, 53, 53, 53, 53, 53, 0, 0, 53, + 53, 0, 241, 0, 0, 53, 0, 53, 53, 53, + 0, 0, 53, 0, 53, 368, 53, 0, 0, 53, + 0, 53, 53, 53, 53, 0, 0, 0, 53, 53, + 53, 0, 0, 53, 53, 53, 0, 0, 368, 0, + 0, 0, 53, 53, 0, 53, 53, 0, 53, 53, + 53, 368, 53, 482, 53, 0, 368, 0, 0, 368, + 0, 368, 0, 368, 368, 368, 368, 0, 0, 0, + 0, 368, 0, 0, 53, 368, 483, 0, 0, 368, + 0, 0, 0, 0, 242, 0, 0, 368, 0, 484, + 368, 0, 368, 0, 486, 0, 0, 0, 0, 487, + 0, 488, 489, 490, 491, 0, 0, 0, 0, 492, + 0, 368, 0, 493, 0, 0, 368, 1494, 0, 0, + 0, 0, 0, 0, 0, 494, 368, 368, 495, 291, + 496, 368, 0, 0, 53, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 368, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 497, 0, 65, 0, 0, 30, + 0, 0, 0, 0, 1495, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 368, 647, 0, 0, + 0, 0, 0, 0, 648, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 649, 0, 1496, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, - 0, 79, 0, 81, 39, 40, 260, 0, 41, 0, - 0, 85, 0, 0, 0, 87, 0, 0, 88, 89, + 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 1039, 0, 650, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 109, 110, 111, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 647, 0, 0, + 0, 0, 0, 0, 648, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 649, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 90, 91, 92, 93, 308, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, - 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, - 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 650, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 259, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 106, 309, 108, 109, 65, 0, 0, 30, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 109, 110, 111, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 260, 0, 41, 0, 0, 0, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 308, 0, 0, 0, 0, 546, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, - 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, - 0, 0, 57, 24, 0, 25, 0, 0, 26, 259, - 0, 0, 0, 27, 62, 63, 0, 28, 0, 106, - 309, 108, 109, 65, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, - 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, - 260, 0, 41, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, - 93, 308, 0, 0, 0, 0, 540, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, - 24, 0, 25, 0, 0, 26, 259, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 106, 309, 108, 109, - 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, + 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 260, 0, 41, - 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 308, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, - 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, - 0, 0, 26, 259, 0, 0, 0, 27, 62, 63, - 0, 28, 0, 106, 309, 108, 109, 65, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, - 0, 81, 39, 40, 260, 0, 41, 0, 0, 0, - 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 91, 92, 93, 94, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, - 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, - 0, 0, 0, 687, 687, 0, 687, 0, 0, 687, - 687, 0, 0, 0, 687, 687, 687, 0, 687, 0, - 106, 107, 108, 109, 687, 0, 0, 687, 0, 0, - 0, 0, 0, 0, 687, 0, 0, 0, 0, 687, - 0, 687, 687, 687, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 687, 0, 687, 687, 0, - 0, 687, 0, 0, 687, 0, 687, 0, 687, 687, - 687, 687, 0, 687, 0, 0, 0, 0, 0, 0, - 687, 0, 0, 687, 687, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 687, 687, - 687, 687, 687, 0, 0, 0, 0, 0, 0, 0, - 0, 687, 0, 0, 0, 0, 0, 687, 687, 687, - 687, 0, 0, 0, 687, 0, 687, 0, 0, 0, - 0, 0, 687, 687, 0, 0, 0, 0, 0, 0, - 146, 146, 0, 146, 0, 0, 146, 146, 0, 0, - 0, 146, 146, 146, 0, 146, 0, 687, 687, 687, - 687, 146, 0, 0, 146, 0, 0, 0, 0, 0, - 0, 146, 0, 0, 0, 0, 146, 0, 146, 146, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 146, 0, 146, 146, 0, 0, 146, 0, - 0, 146, 0, 146, 0, 146, 146, 146, 146, 0, - 146, 0, 0, 0, 0, 0, 0, 146, 0, 0, - 146, 146, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, - 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, - 0, 0, 0, 0, 146, 146, 146, 146, 0, 0, - 0, 146, 0, 146, 0, 0, 0, 0, 0, 146, - 146, 0, 0, 0, 0, 0, 0, 57, 24, 0, - 25, 0, 0, 26, 259, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 146, 146, 146, 146, 65, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, - 79, 0, 81, 39, 40, 260, 0, 41, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, + 0, 0, 551, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, + 0, 0, 545, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 261, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 0, 57, 24, 0, 25, 104, 105, 26, 259, - 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, - 0, 0, 0, 65, 0, 0, 30, 0, 0, 0, - 0, 106, 263, 32, 109, 0, 0, 0, 33, 0, - 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, - 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, - 260, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, - 261, 351, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 733, 0, 733, 0, 733, 106, 263, 733, 109, - 733, 733, 0, 733, 0, 733, 0, 733, 0, 733, - 733, 733, 0, 0, 0, 733, 733, 0, 0, 0, - 0, 733, 0, 733, 733, 0, 0, 0, 733, 0, - 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 733, 733, 0, 733, 0, 0, 0, - 733, 733, 0, 0, 0, 0, 0, 0, 733, 733, - 57, 24, 733, 25, 0, 733, 26, 259, 0, 0, - 733, 27, 62, 63, 0, 28, 0, 0, 0, 0, + 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 0, 0, 722, 722, 0, 722, 0, + 0, 722, 722, 0, 0, 0, 722, 722, 722, 0, + 722, 0, 108, 109, 110, 111, 722, 0, 0, 722, + 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, + 0, 722, 0, 722, 722, 722, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 722, 0, 722, + 722, 0, 0, 722, 0, 0, 722, 0, 722, 0, + 722, 722, 722, 722, 0, 722, 0, 0, 0, 0, + 0, 0, 722, 0, 0, 722, 722, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 722, 722, 722, 722, 722, 0, 0, 722, 722, 0, + 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, + 0, 0, 722, 722, 722, 722, 0, 0, 0, 722, + 0, 722, 0, 0, 0, 0, 0, 722, 722, 0, + 0, 0, 0, 0, 0, 149, 149, 0, 149, 0, + 0, 149, 149, 0, 0, 0, 149, 149, 149, 0, + 149, 0, 722, 722, 722, 722, 149, 0, 0, 149, + 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, + 0, 149, 0, 149, 149, 149, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 149, 0, 149, + 149, 0, 0, 149, 0, 0, 149, 0, 149, 0, + 149, 149, 149, 149, 0, 149, 0, 0, 0, 0, + 0, 0, 149, 0, 0, 149, 149, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 149, 149, 149, 149, 149, 0, 0, 149, 149, 0, + 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, + 0, 0, 149, 149, 149, 149, 0, 0, 0, 149, + 0, 149, 0, 0, 0, 0, 0, 149, 149, 0, + 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 149, 149, 149, 149, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 697, 0, 0, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, + 0, 105, 0, 57, 24, 0, 25, 106, 107, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 0, 0, 30, 0, 0, + 0, 0, 108, 264, 32, 111, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 355, 0, 0, 95, 96, 0, 0, 0, + 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, + 0, 57, 24, 0, 25, 106, 107, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, + 108, 264, 32, 111, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 263, 0, 0, 95, 96, 0, 0, 0, 0, 0, + 57, 24, 98, 25, 0, 0, 26, 260, 0, 679, + 680, 27, 62, 63, 0, 28, 0, 681, 0, 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 32, 0, 733, 733, 0, 33, 0, 72, 73, - 34, 0, 0, 0, 0, 0, 733, 0, 0, 0, + 0, 32, 0, 53, 0, 0, 33, 0, 72, 73, + 34, 0, 0, 0, 0, 0, 0, 0, 108, 1055, + 0, 682, 36, 0, 37, 75, 53, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 261, 53, + 41, 0, 0, 85, 53, 0, 0, 0, 0, 53, + 0, 53, 53, 53, 53, 0, 0, 0, 0, 53, + 0, 0, 0, 53, 0, 90, 91, 92, 262, 263, + 0, 0, 95, 96, 0, 53, 0, 0, 53, 0, + 53, 98, 0, 768, 0, 768, 0, 768, 679, 680, + 768, 0, 768, 768, 0, 768, 681, 768, 0, 768, + 0, 768, 768, 768, 53, 0, 0, 768, 768, 0, + 53, 53, 0, 768, 223, 768, 768, 0, 0, 0, + 768, 0, 0, 0, 768, 0, 0, 108, 264, 0, + 682, 0, 0, 0, 0, 768, 768, 0, 768, 0, + 0, 0, 768, 768, 0, 0, 0, 0, 0, 0, + 768, 768, 0, 0, 768, 0, 0, 768, 0, 0, + 57, 24, 768, 25, 0, 0, 26, 260, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, + 0, 65, 0, 0, 30, 0, 0, 0, 768, 768, + 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, + 34, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 260, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, - 0, 0, 0, 0, 0, 90, 91, 92, 261, 262, - 0, 0, 0, 0, 0, 732, 0, 732, 96, 0, - 732, 0, 732, 732, 0, 732, 0, 732, 0, 732, - 0, 732, 732, 732, 0, 0, 0, 732, 732, 0, - 0, 0, 0, 732, 0, 732, 732, 0, 0, 0, - 732, 0, 0, 0, 732, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 106, 263, 732, 0, 732, 0, - 0, 0, 732, 732, 0, 0, 0, 0, 0, 0, - 732, 732, 0, 24, 732, 25, 0, 732, 26, 0, - 0, 1399, 732, 27, 0, 757, 0, 28, 0, 758, - 1400, 1401, 0, 0, 0, 1402, 30, 0, 0, 0, - 0, 1403, 0, 32, 0, 51, 0, 51, 33, 0, - 51, 0, 34, 0, 0, 51, 0, 0, 732, 51, - 0, 0, 0, 0, 36, 0, 37, 0, 51, 0, - 38, 0, 0, 0, 0, 51, 0, 0, 39, 40, - 51, 0, 41, 0, 51, 1404, 51, 0, 51, 0, - 1405, 0, 0, 51, 0, 0, 51, 0, 51, 732, - 0, 0, 51, 0, 0, 51, 0, 0, 0, 0, - 51, 51, 0, 51, 51, 51, 0, 51, 51, 0, - 0, 0, 0, 51, 0, 0, 1406, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 0, 0, 0, 51, 0, 24, 0, 25, 51, 0, - 26, 0, 51, 169, 51, 27, 51, 0, 0, 28, - 0, 51, 0, 0, 51, 0, 51, 1407, 30, 0, - 51, 0, 0, 51, 0, 32, 0, 0, 51, 51, - 33, 0, 51, 0, 34, 51, 605, 0, 0, 0, - 0, 0, 0, 606, 0, 0, 36, 0, 37, 51, - 0, 0, 38, 0, 0, 607, 0, 0, 0, 0, - 39, 40, 0, 0, 41, 0, 0, 608, 52, 169, - 52, 0, 0, 52, 0, 0, 0, 0, 52, 0, - 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 609, 0, 0, 0, 0, 52, 0, - 51, 0, 51, 52, 0, 51, 0, 52, 0, 52, - 51, 52, 0, 0, 51, 0, 52, 51, 0, 52, - 0, 52, 0, 51, 0, 52, 0, 0, 52, 0, - 51, 0, 0, 52, 52, 51, 0, 52, 0, 51, - 52, 51, 0, 51, 0, 24, 0, 25, 51, 610, - 26, 51, 0, 51, 0, 27, 0, 51, 0, 28, - 51, 0, 0, 29, 0, 51, 51, 0, 30, 51, - 0, 0, 51, 31, 0, 32, 0, 24, 0, 25, - 33, 0, 26, 0, 34, 35, 0, 27, 0, 0, - 0, 28, 0, 0, 0, 0, 36, 0, 37, 0, - 30, 0, 38, 0, 0, 0, 0, 32, 0, 0, - 39, 40, 33, 0, 41, 0, 34, 42, 0, 0, - 0, 37, 52, 0, 0, 0, 0, 0, 36, 0, - 37, 0, 37, 0, 38, 0, 0, 37, 0, 0, - 0, 37, 39, 40, 37, 0, 41, 0, 0, 85, - 0, 0, 0, 0, 51, 0, 37, 37, 0, 0, - 0, 37, 37, 0, 0, 0, 0, 37, 0, 37, - 37, 37, 37, 0, 0, 297, 0, 37, 0, 0, - 0, 37, 0, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 37, 0, 37, 37, 0, 37, 43, - 0, 0, 37, 35, 0, 0, 0, 0, 35, 0, - 0, 0, 35, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, 0, 35, 35, 37, - 37, 330, 35, 35, 31, 0, 0, 0, 35, 0, - 35, 35, 35, 35, 0, 0, 0, 0, 35, 0, - 0, 0, 35, 0, 35, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 35, 0, 35, - 31, 0, 31, 35, 31, 31, 0, 0, 0, 0, - 31, 0, 31, 31, 31, 31, 0, 0, 31, 0, - 31, 0, 0, 35, 31, 31, 0, 0, 0, 0, - 35, 35, 0, 0, 0, 0, 31, 0, 31, 31, - 0, 31, 0, 31, 0, 0, 0, 0, 31, 0, - 31, 31, 31, 31, 0, 0, 0, 0, 31, 0, - 0, 0, 31, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 31, 31, 31, 0, 0, 31, 51, 31, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 0, 0, 0, 0, 51, 0, 0, 0, 51, 0, - 0, 51, 0, 31, 0, 0, 0, 0, 0, 0, - 31, 31, 0, 51, 51, 0, 0, 0, 51, 51, - 0, 51, 0, 0, 51, 0, 51, 51, 51, 51, - 0, 0, 51, 0, 51, 0, 0, 51, 51, 0, - 51, 51, 0, 0, 51, 0, 0, 0, 0, 0, - 51, 0, 0, 51, 0, 51, 51, 51, 0, 51, - 0, 51, 51, 0, 51, 0, 0, 51, 0, 51, - 51, 51, 51, 0, 0, 0, 0, 51, 0, 51, - 0, 51, 0, 51, 0, 0, 39, 51, 0, 0, - 0, 0, 0, 51, 0, 0, 51, 0, 51, 0, - 51, 0, 51, 0, 51, 51, 0, 0, 0, 0, - 51, 0, 51, 51, 51, 51, 0, 0, 0, 0, - 51, 0, 51, 0, 51, 0, 0, 51, 0, 40, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 51, - 51, 51, 0, 0, 51, 51, 0, 0, 0, 0, - 51, 0, 51, 51, 51, 51, 0, 0, 0, 0, - 51, 0, 0, 0, 51, 51, 0, 51, 51, 51, - 0, 0, 220, 0, 0, 0, 51, 0, 0, 51, - 51, 51, 0, 0, 51, 51, 51, 0, 0, 0, - 51, 0, 51, 51, 51, 51, 0, 0, 51, 0, - 51, 0, 0, 0, 51, 51, 0, 51, 51, 51, - 0, 0, 222, 0, 51, 0, 51, 0, 0, 51, - 51, 51, 0, 0, 0, 51, 0, 0, 0, 0, - 51, 0, 51, 51, 51, 51, 0, 51, 0, 0, - 51, 0, 0, 0, 51, 51, 0, 0, 0, 0, - 51, 0, 322, 0, 477, 51, 51, 0, 0, 51, - 51, 51, 51, 51, 51, 51, 0, 0, 0, 0, - 51, 0, 0, 0, 51, 0, 0, 478, 0, 0, - 0, 0, 0, 0, 477, 51, 51, 0, 0, 51, - 479, 51, 323, 0, 480, 481, 0, 0, 0, 0, - 482, 0, 483, 484, 485, 486, 0, 478, 0, 0, - 487, 0, 0, 0, 488, 51, 0, 0, 51, 51, - 479, 0, 0, 0, 0, 481, 489, 0, 0, 490, - 482, 491, 483, 484, 485, 486, 0, 0, 0, 0, - 487, 0, 0, 0, 488, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 492, 489, 0, 0, 490, - 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 492, + 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 262, 263, + 0, 0, 95, 96, 0, 0, 0, 0, 767, 0, + 767, 98, 0, 767, 0, 767, 767, 0, 767, 0, + 767, 0, 767, 0, 767, 767, 767, 0, 0, 0, + 767, 767, 0, 0, 0, 0, 767, 0, 767, 767, + 0, 0, 0, 767, 0, 0, 0, 767, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 264, 767, + 0, 767, 0, 0, 0, 767, 767, 0, 0, 0, + 0, 0, 0, 767, 767, 0, 767, 767, 767, 0, + 767, 767, 0, 767, 767, 767, 767, 0, 767, 0, + 767, 0, 767, 767, 767, 0, 0, 0, 767, 767, + 0, 0, 0, 0, 767, 0, 767, 767, 0, 0, + 0, 767, 0, 0, 0, 767, 0, 0, 0, 0, + 0, 0, 0, 0, 767, 0, 0, 767, 0, 767, + 0, 0, 0, 767, 767, 0, 0, 0, 0, 0, + 0, 767, 767, 0, 24, 767, 25, 0, 767, 26, + 0, 0, 1459, 767, 27, 0, 771, 0, 28, 0, + 772, 1460, 1461, 0, 0, 767, 1462, 30, 0, 0, + 0, 0, 1463, 0, 32, 0, 0, 0, 0, 33, + 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, + 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, + 40, 0, 24, 41, 25, 0, 1464, 26, 0, 0, + 1459, 1465, 27, 0, 771, 0, 28, 0, 772, 1460, + 1461, 0, 0, 767, 1462, 30, 0, 0, 0, 0, + 1463, 0, 32, 0, 0, 0, 0, 33, 0, 0, + 0, 34, 53, 0, 53, 0, 0, 53, 0, 0, + 1466, 0, 53, 36, 0, 37, 53, 0, 0, 38, + 0, 0, 0, 0, 0, 53, 0, 39, 40, 0, + 0, 41, 53, 0, 1464, 0, 0, 53, 0, 1465, + 0, 53, 53, 53, 53, 53, 0, 53, 0, 0, + 53, 1467, 53, 53, 0, 53, 53, 0, 0, 53, + 0, 0, 53, 0, 0, 53, 0, 53, 53, 0, + 0, 53, 53, 0, 53, 0, 0, 53, 0, 0, + 0, 53, 0, 53, 0, 53, 0, 0, 0, 0, + 53, 0, 0, 53, 0, 53, 0, 0, 0, 53, + 0, 0, 53, 0, 0, 0, 0, 53, 53, 0, + 0, 53, 0, 172, 53, 24, 0, 25, 0, 1467, + 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 172, 0, 0, 34, 54, 616, 54, 0, 53, + 54, 0, 0, 617, 0, 54, 36, 0, 37, 54, + 0, 0, 38, 0, 0, 618, 0, 0, 54, 0, + 39, 40, 0, 0, 41, 54, 0, 619, 0, 0, + 54, 0, 0, 0, 54, 53, 54, 53, 54, 53, + 53, 0, 0, 54, 0, 53, 54, 0, 54, 53, + 0, 0, 54, 620, 0, 54, 0, 0, 53, 0, + 54, 54, 0, 0, 54, 53, 0, 54, 0, 0, + 53, 0, 0, 0, 53, 24, 53, 25, 53, 0, + 26, 0, 0, 53, 0, 27, 53, 0, 53, 28, + 0, 0, 53, 29, 0, 53, 0, 0, 30, 0, + 53, 53, 0, 31, 53, 32, 0, 53, 0, 0, + 33, 0, 621, 0, 34, 35, 0, 0, 0, 202, + 0, 202, 0, 0, 202, 0, 36, 0, 37, 202, + 0, 0, 38, 202, 0, 0, 0, 0, 0, 0, + 39, 40, 202, 24, 41, 25, 0, 42, 26, 202, + 1392, 0, 54, 27, 202, 0, 0, 28, 202, 0, + 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 202, 0, 202, 32, 0, 0, 202, 0, 33, 0, + 1393, 0, 34, 0, 202, 202, 0, 39, 202, 0, + 0, 202, 53, 0, 36, 0, 37, 0, 39, 0, + 38, 1394, 0, 39, 0, 0, 0, 39, 39, 40, + 39, 0, 41, 0, 0, 85, 0, 0, 0, 0, + 0, 0, 39, 39, 0, 0, 0, 39, 39, 0, + 0, 0, 43, 39, 37, 39, 39, 39, 39, 0, + 0, 0, 0, 39, 0, 37, 0, 39, 0, 39, + 37, 0, 0, 0, 37, 0, 0, 37, 0, 39, + 0, 39, 39, 0, 39, 0, 0, 0, 39, 37, + 37, 0, 0, 0, 37, 37, 202, 0, 0, 0, + 37, 53, 37, 37, 37, 37, 0, 0, 39, 0, + 37, 0, 53, 0, 37, 0, 37, 53, 39, 39, + 387, 53, 0, 0, 53, 0, 37, 0, 0, 37, + 0, 37, 0, 0, 0, 37, 53, 53, 0, 0, + 0, 53, 53, 0, 0, 0, 0, 53, 53, 53, + 53, 53, 53, 0, 0, 37, 0, 53, 0, 53, + 0, 53, 0, 53, 53, 37, 37, 0, 53, 0, + 0, 53, 0, 53, 0, 0, 53, 0, 53, 0, + 0, 0, 53, 53, 53, 0, 53, 0, 53, 53, + 0, 0, 0, 0, 53, 0, 53, 53, 53, 53, + 0, 0, 53, 0, 53, 0, 0, 0, 53, 53, + 53, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 53, 0, 53, 53, 53, 53, 0, 53, 0, 53, + 0, 0, 53, 0, 53, 53, 53, 53, 0, 0, + 0, 0, 53, 0, 0, 0, 53, 53, 0, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 42, + 53, 53, 0, 53, 0, 53, 0, 0, 0, 0, + 53, 0, 53, 53, 53, 53, 0, 0, 0, 0, + 53, 0, 0, 0, 53, 0, 0, 53, 0, 0, + 0, 0, 0, 53, 53, 0, 53, 225, 0, 53, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, + 0, 53, 53, }; protected static readonly short [] yyCheck = { 17, - 306, 18, 4, 305, 320, 17, 17, 52, 6, 17, - 52, 385, 544, 295, 193, 192, 546, 239, 494, 354, - 237, 69, 329, 304, 252, 20, 516, 341, 161, 304, - 594, 601, 119, 1019, 302, 117, 60, 119, 60, 612, - 88, 89, 379, 396, 1196, 93, 78, 975, 59, 824, - 256, 395, 1236, 256, 256, 0, 74, 621, 268, 268, - 78, 336, 256, 379, 17, 113, 268, 292, 256, 80, - 256, 82, 256, 1470, 256, 256, 335, 1230, 96, 45, - 385, 1340, 48, 0, 88, 89, 256, 294, 282, 62, - 464, 1275, 1024, 66, 67, 68, 369, 70, 71, 306, - 1359, 17, 75, 76, 256, 109, 1290, 17, 81, 82, - 256, 84, 256, 86, 256, 369, 1076, 1305, 91, 92, - 314, 269, 357, 21, 325, 499, 369, 17, 176, 792, - 256, 794, 256, 374, 377, 256, 377, 256, 286, 375, - 256, 1294, 1102, 161, 17, 118, 256, 372, 193, 161, - 161, 193, 387, 161, 20, 53, 1314, 430, 731, 464, - 369, 436, 256, 256, 17, 419, 372, 395, 256, 339, - 373, 430, 375, 17, 344, 838, 346, 268, 841, 349, - 350, 417, 352, 353, 368, 276, 368, 256, 372, 17, - 372, 17, 237, 256, 1382, 237, 421, 17, 256, 203, - 204, 382, 1599, 251, 252, 375, 392, 60, 161, 17, - 17, 64, 419, 423, 423, 421, 590, 265, 419, 17, - 1152, 423, 88, 89, 368, 419, 540, 430, 256, 415, - 372, 419, 1160, 377, 252, 233, 422, 421, 460, 421, - 258, 543, 459, 109, 331, 161, 328, 363, 585, 331, - 343, 161, 626, 363, 302, 1413, 338, 631, 632, 594, - 430, 227, 60, 1421, 268, 795, 64, 419, 292, 585, - 292, 161, 363, 419, 368, 1534, 370, 295, 372, 421, - 302, 851, 300, 301, 628, 333, 621, 260, 161, 358, - 294, 264, 340, 419, 382, 419, 612, 315, 419, 392, - 419, 325, 1561, 419, 352, 323, 0, 325, 161, 419, - 314, 329, 257, 324, 1573, 256, 1575, 161, 376, 382, - 1478, 256, 415, 256, 342, 343, 631, 421, 419, 422, - 424, 304, 256, 161, 1191, 161, 429, 203, 204, 387, - 257, 161, 354, 391, 348, 349, 354, 395, 396, 377, - 1125, 383, 726, 161, 161, 272, 425, 426, 427, 428, - 277, 256, 256, 161, 281, 383, 375, 256, 256, 256, - 374, 256, 256, 277, 1231, 369, 1528, 395, 396, 296, - 953, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 414, 441, 442, 732, 256, 445, 256, 674, - 628, 256, 268, 392, 256, 256, 323, 256, 417, 413, - 1594, 256, 363, 431, 459, 731, 1402, 459, 1081, 256, - 256, 726, 363, 256, 469, 342, 415, 469, 294, 256, - 371, 256, 373, 368, 375, 370, 430, 441, 442, 292, - 306, 757, 1626, 256, 377, 257, 256, 256, 314, 266, - 256, 339, 376, 306, 320, 266, 344, 987, 346, 363, - 256, 349, 350, 256, 352, 353, 461, 515, 419, 517, - 262, 264, 325, 780, 256, 965, 370, 325, 419, 474, - 305, 376, 348, 349, 373, 369, 371, 375, 363, 376, - 375, 375, 516, 292, 292, 340, 544, 314, 509, 465, - 466, 354, 876, 314, 341, 471, 298, 257, 374, 372, - 370, 256, 256, 379, 372, 419, 420, 739, 358, 370, - 375, 370, 570, 375, 542, 17, 544, 325, 546, 797, - 867, 277, 325, 370, 887, 281, 1106, 765, 511, 375, - 373, 351, 430, 1206, 419, 1075, 373, 413, 559, 294, - 772, 867, 1215, 305, 429, 368, 354, 575, 421, 376, - 578, 414, 256, 611, 373, 376, 369, 373, 60, 368, - 369, 419, 64, 377, 343, 441, 442, 373, 589, 627, - 628, 1244, 594, 369, 671, 558, 594, 379, 380, 671, - 601, 373, 335, 369, 373, 461, 342, 710, 369, 343, - 363, 369, 715, 716, 375, 1175, 1463, 375, 474, 621, - 628, 1320, 1321, 621, 382, 952, 414, 374, 636, 637, - 377, 363, 373, 392, 368, 673, 430, 430, 372, 369, - 374, 375, 256, 377, 1343, 1492, 1493, 953, 382, 1496, - 419, 1304, 373, 369, 430, 339, 415, 1211, 950, 343, - 373, 377, 1509, 422, 430, 1512, 419, 1563, 1564, 430, - 429, 1370, 430, 516, 712, 893, 714, 981, 372, 161, - 1527, 263, 416, 256, 368, 723, 809, 419, 372, 430, - 374, 375, 376, 377, 1393, 373, 263, 429, 382, 374, - 430, 370, 710, 256, 1551, 374, 294, 715, 716, 430, - 718, 369, 339, 272, 430, 986, 272, 430, 277, 984, - 369, 341, 281, 1019, 1620, 339, 375, 765, 516, 585, - 344, 419, 346, 315, 339, 349, 350, 296, 352, 353, - 296, 368, 256, 1321, 782, 372, 399, 400, 315, 424, - 370, 594, 430, 1321, 1321, 424, 612, 765, 1193, 797, - 272, 419, 305, 368, 323, 1245, 339, 323, 256, 357, - 758, 344, 780, 346, 343, 363, 349, 350, 621, 352, - 353, 1078, 370, 342, 296, 797, 374, 795, 272, 1321, - 343, 305, 1370, 1321, 802, 1317, 804, 339, 1233, 387, - 1092, 306, 1370, 1370, 1425, 1321, 594, 372, 313, 374, - 292, 323, 296, 382, 1321, 368, 430, 256, 1439, 372, - 325, 374, 375, 392, 377, 1043, 368, 1321, 866, 382, - 831, 419, 833, 621, 376, 843, 830, 845, 1370, 323, - 1461, 256, 1370, 325, 1169, 948, 415, 855, 849, 887, - 851, 339, 846, 422, 1370, 893, 344, 430, 346, 339, - 429, 349, 350, 1370, 352, 353, 829, 343, 1035, 863, - 339, 369, 354, 364, 370, 731, 1370, 375, 368, 887, - 339, 372, 985, 374, 382, 893, 1211, 377, 368, 392, - 343, 369, 1164, 372, 902, 930, 904, 375, 930, 368, - 339, 757, 393, 394, 1196, 344, 382, 346, 382, 368, - 349, 350, 415, 352, 353, 368, 392, 371, 392, 422, - 377, 375, 413, 1026, 339, 1028, 429, 1199, 1031, 344, - 421, 346, 414, 424, 349, 350, 343, 352, 353, 415, - 948, 415, 950, 256, 402, 357, 422, 343, 422, 792, - 935, 794, 940, 429, 992, 256, 414, 368, 343, 967, - 954, 368, 374, 343, 972, 339, 377, 975, 269, 343, - 1242, 1189, 368, 1439, 830, 387, 377, 985, 392, 987, - 1305, 377, 990, 368, 1022, 286, 415, 368, 368, 370, - 846, 430, 377, 422, 368, 838, 1516, 377, 841, 343, - 357, 415, 306, 377, 792, 1043, 794, 863, 422, 313, - 294, 867, 1115, 1408, 1117, 430, 1119, 374, 1026, 368, - 1028, 1059, 306, 1031, 368, 1420, 339, 1065, 383, 384, - 387, 344, 256, 346, 516, 1043, 349, 350, 1383, 352, - 353, 387, 397, 398, 306, 1390, 308, 372, 1260, 1256, - 838, 313, 369, 841, 1048, 1040, 1328, 1382, 1578, 1228, - 377, 370, 1050, 325, 1052, 385, 1054, 1075, 1408, 357, - 1078, 374, 1436, 382, 377, 363, 375, 1383, 377, 935, - 1420, 386, 370, 382, 1390, 373, 374, 375, 373, 1453, - 375, 368, 369, 368, 369, 1615, 390, 953, 954, 387, - 377, 372, 377, 374, 401, 1106, 1402, 1115, 1472, 1117, - 1474, 1119, 594, 391, 1122, 339, 1219, 430, 1640, 1641, - 344, 373, 346, 375, 370, 349, 350, 369, 352, 353, - 369, 419, 419, 375, 373, 377, 375, 416, 377, 621, - 369, 1133, 256, 373, 373, 375, 375, 377, 377, 369, - 1253, 1189, 1160, 373, 371, 372, 1164, 377, 375, 395, - 396, 371, 372, 1019, 374, 375, 376, 1169, 371, 1177, - 1178, 1169, 375, 371, 1175, 373, 1019, 375, 371, 419, - 373, 1189, 375, 1190, 1040, 371, 371, 277, 1196, 375, - 375, 1199, 1048, 1228, 374, 1230, 1228, 371, 1230, 373, - 373, 368, 377, 1306, 377, 372, 430, 374, 375, 1211, - 377, 1219, 377, 1211, 371, 382, 256, 1225, 375, 369, - 370, 1256, 371, 1326, 1256, 265, 375, 267, 371, 375, - 270, 377, 375, 372, 1242, 275, 1528, 376, 1081, 279, - 419, 420, 421, 422, 382, 1253, 1254, 6, 288, 416, - 373, 368, 373, 371, 377, 295, 377, 375, 17, 1294, - 300, 371, 1294, 373, 304, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 256, 316, 373, 318, 1317, - 374, 377, 322, 368, 369, 1320, 1321, 256, 1320, 1321, - 330, 331, 294, 1081, 334, 354, 355, 337, 1306, 377, - 371, 60, 373, 1305, 377, 64, 20, 1305, 1343, 1317, - 792, 1343, 794, 387, 388, 389, 294, 371, 1326, 373, - 1328, 373, 373, 375, 375, 1319, 1169, 354, 355, 88, - 89, 375, 343, 377, 256, 1370, 1374, 371, 1370, 373, - 371, 373, 373, 265, 377, 267, 356, 375, 270, 377, - 109, 419, 375, 275, 377, 419, 838, 279, 1393, 841, - 1652, 1393, 375, 1206, 377, 802, 288, 804, 1211, 369, - 370, 419, 1215, 295, 88, 89, 1232, 370, 300, 419, - 1382, 1169, 304, 373, 1382, 1386, 415, 1381, 376, 415, - 416, 365, 366, 373, 316, 109, 318, 368, 369, 382, - 322, 1244, 161, 365, 366, 1399, 1400, 377, 330, 331, - 415, 416, 334, 417, 418, 337, 423, 424, 1206, 369, - 364, 375, 430, 1211, 373, 369, 373, 1215, 372, 294, - 374, 375, 294, 1427, 375, 373, 1430, 373, 382, 1447, - 375, 1297, 373, 1444, 203, 204, 256, 377, 372, 393, - 394, 256, 429, 429, 294, 294, 1244, 382, 373, 375, - 374, 1304, 1305, 1319, 376, 375, 374, 419, 373, 413, - 430, 1506, 375, 382, 1506, 375, 375, 421, 375, 424, - 424, 373, 375, 368, 375, 373, 430, 343, 1523, 203, - 204, 1523, 375, 294, 294, 375, 419, 419, 0, 371, - 419, 1536, 1537, 372, 1536, 1537, 376, 368, 1516, 268, - 256, 256, 375, 1514, 256, 256, 1304, 1305, 382, 280, - 1528, 256, 368, 373, 369, 1381, 343, 1383, 1563, 1564, - 371, 1563, 1564, 292, 1390, 294, 372, 1545, 375, 1382, - 0, 375, 377, 1399, 1400, 377, 1402, 306, 373, 382, - 371, 373, 1408, 373, 268, 314, 424, 373, 382, 1402, - 347, 320, 368, 382, 1420, 256, 325, 382, 256, 1425, - 1578, 1427, 369, 377, 1430, 373, 256, 373, 256, 347, - 294, 375, 371, 1439, 376, 1620, 372, 371, 1620, 348, - 349, 292, 306, 371, 1382, 354, 373, 348, 369, 1081, - 314, 339, 1640, 1641, 373, 1461, 320, 1615, 419, 375, - 372, 419, 348, 373, 256, 374, 369, 382, 368, 368, - 379, 377, 1623, 1624, 368, 356, 369, 375, 337, 1630, - 1631, 305, 1640, 1641, 348, 349, 373, 377, 372, 369, - 369, 373, 369, 419, 1652, 370, 372, 419, 368, 419, - 372, 372, 419, 377, 413, 414, 372, 374, 368, 339, - 374, 372, 343, 382, 344, 379, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 372, 377, 382, - 370, 373, 441, 442, 373, 372, 256, 1169, 374, 369, - 375, 371, 374, 373, 377, 375, 376, 377, 375, 413, - 375, 419, 375, 373, 373, 371, 419, 419, 373, 377, - 377, 391, 419, 377, 373, 373, 369, 371, 373, 382, - 382, 369, 315, 263, 1206, 372, 372, 441, 442, 1211, - 94, 382, 369, 1215, 98, 99, 100, 101, 102, 103, - 104, 105, 373, 373, 377, 0, 0, 461, 368, 377, - 430, 369, 377, 0, 373, 257, 369, 516, 373, 261, - 474, 368, 1244, 373, 369, 371, 369, 419, 377, 373, - 272, 371, 368, 374, 419, 277, 419, 369, 373, 281, - 377, 369, 284, 373, 373, 369, 377, 368, 373, 369, - 377, 373, 369, 315, 296, 297, 256, 263, 377, 301, - 302, 261, 262, 377, 377, 307, 377, 309, 310, 311, - 312, 377, 377, 377, 377, 317, 377, 51, 12, 321, - 5, 323, 1304, 1305, 284, 1040, 585, 935, 1189, 0, - 1189, 333, 1393, 335, 336, 594, 338, 297, 298, 1343, - 342, 1398, 302, 1238, 1568, 305, 1531, 307, 1519, 309, - 310, 311, 312, 612, 1444, 1584, 1548, 317, 1514, 957, - 362, 321, 621, 952, 957, 325, 957, 369, 370, 771, - 1425, 585, 1358, 333, 1631, 1370, 336, 1445, 338, 339, - 1625, 1541, 1537, 343, 344, 1536, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 612, 1624, - 1382, 1294, 362, 363, 1474, 930, 320, 1297, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 414, 379, - 380, 981, 637, 383, 384, 385, 386, 387, 893, 1092, - 390, 391, 72, 261, 765, 395, 396, 397, 398, 399, - 400, 401, 402, 797, 308, 0, 344, 992, 425, 427, - 426, 430, 1195, 428, 414, 429, 284, 417, 585, 419, - 867, 421, 1272, 1381, 424, 1169, 161, 1154, 1077, 297, - 430, 1178, 731, 1102, 302, 1061, 1167, 341, 1245, 307, - 1169, 309, 310, 311, 312, 560, 1214, 351, 450, 317, - 996, 450, 1376, 321, 1254, 932, 925, 325, 757, -1, - -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, - 338, -1, -1, 721, -1, -1, -1, 731, -1, -1, + 4, 17, 306, 18, 52, 307, 17, 549, 296, 240, + 238, 499, 551, 196, 361, 199, 60, 17, 60, 195, + 521, 253, 69, 330, 52, 305, 305, 605, 321, 345, + 165, 422, 612, 303, 121, 422, 403, 838, 78, 1254, + 422, 88, 89, 6, 1044, 0, 93, 648, 59, 386, + 806, 392, 808, 402, 632, 256, 74, 997, 256, 1294, + 78, 340, 623, 119, 45, 121, 256, 48, 115, 80, + 256, 82, 1530, 268, 256, 392, 256, 95, 17, 268, + 98, 256, 268, 256, 256, 256, 256, 256, 256, 294, + 256, 256, 325, 386, 256, 1374, 852, 256, 145, 855, + 1335, 306, 1400, 256, 256, 1049, 256, 380, 256, 263, + 256, 256, 376, 256, 282, 1350, 17, 17, 395, 339, + 395, 1419, 256, 256, 372, 256, 256, 256, 256, 1117, + 378, 371, 372, 371, 372, 374, 375, 385, 256, 378, + 380, 418, 380, 418, 256, 343, 314, 165, 196, 165, + 425, 371, 88, 89, 165, 1143, 17, 432, 422, 379, + 433, 315, 321, 17, 443, 165, 726, 17, 196, 339, + 402, 731, 732, 17, 344, 111, 346, 372, 379, 349, + 350, 0, 352, 353, 745, 351, 376, 504, 378, 422, + 238, 17, 17, 375, 1473, 17, 376, 395, 378, 371, + 17, 1659, 1481, 375, 379, 252, 253, 376, 378, 371, + 238, 339, 385, 375, 385, 363, 344, 422, 346, 266, + 418, 349, 350, 373, 352, 353, 165, 425, 380, 545, + 375, 426, 375, 363, 432, 253, 467, 426, 466, 385, + 426, 259, 583, 433, 548, 332, 380, 228, 256, 293, + 378, 293, 424, 433, 422, 592, 303, 422, 605, 1538, + 1204, 303, 424, 433, 165, 165, 583, 203, 204, 422, + 809, 234, 1212, 329, 422, 17, 332, 395, 296, 424, + 597, 424, 326, 301, 302, 632, 342, 334, 868, 422, + 639, 422, 422, 422, 256, 479, 1594, 344, 316, 592, + 418, 642, 257, 904, 165, 433, 324, 425, 326, 356, + 422, 165, 330, 256, 325, 165, 0, 266, 60, 256, + 637, 165, 64, 1621, 363, 642, 643, 325, 346, 347, + 623, 256, 358, 269, 268, 1633, 256, 1635, 256, 165, + 165, 1249, 276, 165, 256, 361, 277, 394, 165, 256, + 390, 398, 256, 256, 256, 402, 403, 256, 266, 295, + 1251, 361, 256, 256, 372, 314, 1122, 256, 1623, 1624, + 378, 307, 390, 1588, 256, 263, 1177, 262, 422, 315, + 422, 1289, 256, 422, 402, 403, 256, 357, 256, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 1291, 448, 449, 335, 256, 452, 314, 639, 418, 746, + 970, 373, 257, 298, 975, 425, 352, 353, 466, 1654, + 390, 439, 1365, 165, 422, 1680, 474, 315, 257, 363, + 379, 341, 363, 88, 89, 62, 379, 256, 466, 66, + 67, 68, 379, 70, 71, 381, 474, 1007, 75, 76, + 1288, 1686, 745, 378, 81, 82, 111, 84, 378, 86, + 378, 373, 1462, 373, 91, 92, 365, 371, 371, 376, + 1009, 379, 340, 520, 376, 522, 380, 521, 771, 376, + 256, 256, 376, 376, 373, 421, 987, 794, 422, 470, + 471, 422, 423, 120, 376, 476, 256, 382, 383, 1442, + 374, 433, 549, 514, 378, 1065, 376, 1067, 1264, 372, + 1070, 272, 448, 449, 376, 856, 1354, 1273, 405, 371, + 339, 373, 753, 256, 343, 372, 377, 335, 575, 547, + 417, 549, 378, 551, 925, 296, 433, 256, 925, 856, + 372, 811, 376, 925, 911, 264, 1302, 779, 203, 204, + 887, 293, 371, 564, 256, 786, 375, 741, 377, 378, + 379, 380, 323, 581, 363, 376, 385, 585, 1148, 256, + 433, 433, 305, 257, 420, 622, 427, 1116, 378, 896, + 598, 341, 600, 358, 326, 596, 433, 363, 272, 605, + 422, 638, 639, 277, 887, 422, 683, 281, 374, 433, + 376, 612, 378, 647, 648, 605, 325, 1167, 1364, 1169, + 21, 1171, 296, 373, 269, 1523, 632, 363, 343, 361, + 420, 639, 433, 422, 277, 1014, 272, 683, 281, 647, + 648, 277, 632, 432, 261, 281, 256, 974, 265, 323, + 295, 688, 53, 372, 1552, 1553, 422, 1227, 1556, 378, + 296, 256, 339, 428, 429, 430, 431, 344, 342, 346, + 315, 1569, 349, 350, 1572, 352, 353, 1056, 972, 371, + 395, 373, 372, 375, 372, 372, 422, 323, 305, 1587, + 422, 728, 975, 730, 305, 917, 432, 1003, 823, 342, + 372, 1269, 739, 418, 305, 372, 342, 352, 353, 339, + 425, 372, 343, 1611, 433, 375, 372, 432, 726, 380, + 375, 365, 378, 731, 732, 371, 734, 1277, 380, 385, + 256, 375, 424, 343, 380, 427, 381, 1006, 1008, 371, + 371, 371, 779, 433, 339, 433, 433, 256, 380, 344, + 422, 346, 1044, 343, 349, 350, 682, 352, 353, 796, + 373, 371, 1381, 1313, 377, 375, 433, 377, 378, 424, + 380, 779, 433, 256, 811, 385, 421, 433, 1159, 811, + 424, 1162, 1159, 957, 1165, 1162, 794, 1159, 1165, 521, + 1162, 1381, 1381, 1165, 1381, 385, 305, 272, 1381, 398, + 399, 809, 1381, 448, 449, 395, 343, 272, 816, 419, + 818, 1430, 1303, 339, 427, 373, 1366, 1381, 344, 772, + 346, 296, 1119, 349, 350, 256, 352, 353, 418, 256, + 380, 296, 1380, 1381, 371, 425, 1386, 379, 433, 1133, + 1430, 1430, 432, 1430, 845, 1377, 847, 1430, 323, 886, + 858, 1430, 357, 395, 862, 1403, 395, 256, 323, 377, + 343, 1083, 380, 294, 872, 866, 1430, 868, 256, 339, + 904, 908, 377, 605, 911, 1381, 418, 294, 339, 418, + 917, 269, 1430, 425, 1221, 390, 425, 924, 371, 306, + 432, 925, 375, 925, 377, 378, 904, 380, 286, 516, + 632, 371, 385, 911, 294, 1453, 1080, 433, 1074, 917, + 371, 919, 339, 343, 952, 647, 648, 344, 844, 346, + 372, 929, 349, 350, 1430, 352, 353, 339, 380, 306, + 1485, 339, 1269, 372, 952, 343, 313, 863, 1216, 378, + 339, 357, 385, 343, 1499, 344, 563, 346, 343, 375, + 349, 350, 395, 352, 353, 385, 343, 883, 339, 371, + 1254, 377, 970, 371, 972, 395, 1521, 357, 17, 88, + 89, 371, 380, 363, 390, 418, 371, 1014, 371, 1257, + 380, 989, 425, 373, 371, 380, 994, 377, 418, 997, + 371, 269, 111, 380, 375, 425, 390, 306, 256, 1007, + 390, 1009, 432, 343, 313, 373, 433, 1443, 286, 962, + 1047, 60, 357, 375, 1450, 64, 325, 385, 375, 1056, + 377, 1499, 1300, 372, 6, 1247, 371, 376, 1365, 378, + 375, 371, 422, 388, 433, 17, 374, 682, 386, 387, + 378, 306, 1468, 308, 1468, 390, 1083, 1576, 313, 375, + 976, 377, 400, 401, 1480, 256, 1480, 1065, 372, 1067, + 325, 372, 1070, 1100, 372, 372, 380, 378, 376, 1106, + 378, 378, 380, 380, 806, 1083, 808, 393, 60, 372, + 199, 339, 64, 376, 203, 204, 344, 380, 346, 374, + 389, 349, 350, 378, 352, 353, 372, 372, 1316, 1320, + 376, 404, 378, 378, 380, 1442, 88, 89, 1116, 1638, + 1388, 1119, 378, 1286, 380, 394, 165, 374, 1044, 385, + 852, 378, 374, 855, 1161, 1159, 378, 1159, 1162, 111, + 1162, 1165, 1140, 1165, 402, 403, 376, 1090, 339, 1092, + 380, 1094, 1150, 344, 373, 346, 1675, 1148, 349, 350, + 269, 352, 353, 374, 375, 422, 377, 378, 379, 1167, + 1443, 1169, 1088, 1171, 419, 357, 1174, 1450, 1700, 1701, + 1462, 363, 904, 375, 422, 433, 295, 379, 376, 256, + 378, 373, 380, 165, 376, 377, 378, 277, 307, 1496, + 374, 1185, 376, 925, 378, 377, 315, 374, 390, 844, + 380, 378, 321, 374, 1212, 371, 1513, 378, 1216, 375, + 1247, 377, 378, 374, 380, 1221, 376, 378, 863, 385, + 380, 203, 204, 1231, 1232, 1532, 1227, 1534, 372, 373, + 422, 1221, 433, 352, 353, 371, 376, 373, 883, 1247, + 380, 364, 377, 1248, 293, 380, 1254, 374, 1286, 1257, + 1288, 378, 375, 419, 377, 376, 374, 371, 376, 380, + 378, 377, 381, 1269, 380, 378, 379, 386, 1286, 1277, + 1288, 366, 367, 396, 397, 1283, 380, 326, 1316, 1269, + 427, 428, 429, 430, 376, 1159, 378, 269, 1162, 390, + 391, 392, 1300, 416, 1588, 376, 256, 378, 1316, 371, + 372, 424, 421, 377, 427, 1313, 1314, 374, 378, 376, + 380, 293, 361, 295, 380, 374, 1354, 376, 374, 374, + 376, 376, 354, 355, 364, 307, 376, 256, 378, 448, + 449, 976, 372, 315, 380, 375, 1354, 377, 378, 321, + 1377, 294, 1380, 1381, 326, 385, 376, 374, 378, 376, + 374, 422, 376, 378, 294, 380, 396, 397, 1366, 1365, + 479, 376, 1380, 1381, 1290, 1403, 378, 343, 380, 1377, + 352, 353, 378, 422, 380, 1365, 416, 422, 1386, 361, + 1388, 378, 380, 380, 424, 1403, 356, 427, 354, 355, + 1122, 379, 1430, 433, 816, 1012, 818, 1434, 373, 381, + 372, 373, 418, 419, 386, 368, 369, 366, 367, 366, + 367, 376, 1430, 371, 372, 1453, 368, 369, 1712, 423, + 424, 376, 425, 426, 431, 432, 418, 1159, 372, 380, + 1162, 1357, 378, 1165, 433, 1453, 1442, 385, 376, 421, + 422, 376, 422, 1088, 294, 1446, 256, 294, 378, 376, + 364, 376, 1442, 1379, 378, 265, 376, 267, 372, 256, + 270, 375, 380, 377, 378, 275, 448, 449, 432, 279, + 432, 375, 521, 592, 0, 256, 294, 294, 288, 385, + 422, 376, 396, 397, 378, 295, 377, 379, 378, 1221, + 300, 377, 385, 376, 304, 427, 422, 378, 378, 1507, + 378, 378, 416, 1504, 623, 433, 316, 376, 318, 371, + 424, 378, 322, 427, 378, 1441, 376, 343, 379, 433, + 330, 331, 421, 378, 334, 376, 294, 337, 1566, 294, + 378, 374, 1264, 1459, 1460, 422, 1462, 1269, 375, 521, + 422, 1273, 371, 379, 256, 1583, 256, 378, 1566, 256, + 256, 385, 280, 256, 376, 371, 605, 372, 1596, 1597, + 343, 1487, 376, 682, 1490, 1583, 385, 298, 1576, 376, + 1302, 374, 385, 1574, 378, 375, 378, 378, 1596, 1597, + 1588, 380, 380, 632, 376, 1623, 1624, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 1605, 647, 648, + 385, 374, 376, 427, 376, 1623, 1624, 385, 347, 421, + 592, 371, 422, 88, 89, 385, 385, 256, 256, 376, + 376, 380, 741, 605, 372, 376, 745, 347, 378, 374, + 1638, 374, 1364, 1365, 375, 379, 111, 374, 376, 339, + 348, 623, 1680, 372, 378, 422, 376, 422, 375, 348, + 632, 376, 771, 256, 372, 371, 371, 380, 371, 385, + 356, 372, 1680, 1700, 1701, 647, 648, 1675, 337, 305, + 375, 380, 376, 422, 372, 0, 378, 372, 372, 376, + 373, 371, 1683, 1684, 375, 377, 422, 422, 375, 1690, + 1691, 380, 1700, 1701, 375, 375, 375, 385, 422, 371, + 682, 343, 375, 380, 1712, 373, 376, 385, 375, 94, + 1442, 376, 378, 377, 377, 100, 101, 102, 103, 104, + 105, 106, 107, 378, 199, 844, 378, 256, 203, 204, + 378, 257, 376, 380, 1379, 261, 422, 422, 422, 376, + 374, 315, 385, 372, 863, 380, 272, 380, 376, 380, + 376, 277, 376, 385, 374, 281, 372, 806, 284, 808, + 422, 376, 263, 745, 883, 375, 375, 385, 887, 376, + 296, 297, 372, 0, 376, 301, 302, 422, 0, 380, + 371, 307, 380, 309, 310, 311, 312, 372, 380, 771, + 376, 317, 0, 372, 269, 321, 1441, 323, 376, 371, + 376, 422, 371, 852, 374, 372, 855, 333, 376, 335, + 336, 372, 338, 376, 1459, 1460, 342, 374, 422, 372, + 295, 376, 376, 422, 806, 376, 808, 372, 380, 376, + 380, 380, 307, 372, 371, 376, 362, 372, 957, 377, + 315, 372, 1487, 376, 380, 1490, 321, 373, 380, 315, + 380, 263, 256, 380, 51, 904, 975, 976, 380, 380, + 380, 265, 844, 267, 380, 380, 270, 12, 5, 1080, + 852, 275, 957, 855, 1247, 279, 925, 352, 353, 1453, + 1247, 863, 1403, 1458, 288, 0, 1296, 1628, 1591, 1644, + 1579, 295, 1608, 1574, 1485, 1504, 300, 979, 1691, 979, + 304, 883, 1430, 979, 1418, 887, 381, 1505, 1685, 785, + 974, 386, 316, 1597, 318, 1601, 1596, 1684, 322, 1354, + 1534, 952, 904, 321, 309, 1044, 330, 331, 1357, 600, + 334, 917, 257, 337, 1003, 779, 261, 1133, 72, 811, + 348, 422, 422, 925, 1161, 1165, 421, 272, 433, 435, + 434, 438, 277, 436, 887, 437, 281, 1253, 1332, 284, + 345, 1080, 592, 1441, 165, 648, 1118, 1221, 1206, 1088, + 355, 296, 297, 448, 449, 1143, 301, 302, 1102, 1232, + 1219, 1303, 307, 565, 309, 310, 311, 312, 1221, 1272, + 1018, 737, 317, 975, 976, 457, 321, 457, 323, 1436, + 954, 1314, 947, -1, 479, -1, -1, -1, 333, -1, + -1, 336, -1, 338, -1, -1, -1, 342, 422, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 792, 362, 794, 0, -1, -1, -1, - -1, 369, -1, 757, -1, -1, 410, 411, 412, -1, - -1, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, -1, -1, -1, - -1, 830, -1, -1, -1, -1, -1, -1, -1, 838, - -1, -1, 841, -1, -1, -1, 257, 846, -1, -1, - 261, 419, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, -1, -1, 863, -1, 277, -1, 867, -1, - 281, -1, -1, 284, -1, -1, 830, 256, -1, -1, - -1, -1, -1, -1, -1, 296, 297, -1, -1, -1, - 301, 302, 846, -1, -1, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, 863, - 321, -1, 323, 867, -1, -1, -1, 0, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, -1, -1, - -1, 342, -1, -1, -1, -1, 540, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 362, -1, -1, 953, 954, -1, 368, 369, 370, - 339, -1, 257, -1, -1, 344, 261, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 272, -1, -1, - -1, 935, 277, -1, -1, -1, 281, -1, -1, 284, - 369, -1, 371, -1, 373, -1, 375, 376, 377, 953, - 954, 296, 297, -1, -1, -1, 301, 302, -1, -1, - -1, -1, 307, 617, 309, 310, 311, 312, -1, -1, - 1019, -1, 317, -1, -1, -1, 321, -1, 323, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, - 335, 336, -1, 338, -1, -1, -1, 342, -1, 1048, - -1, 430, -1, 257, -1, -1, -1, 261, -1, -1, - -1, 364, -1, 667, 668, 1019, 369, 362, 272, 372, - -1, 374, 375, 277, -1, 370, 680, 281, -1, -1, - 284, -1, 1081, -1, -1, -1, 1040, -1, -1, -1, - 393, 394, 296, 297, 1048, -1, -1, 301, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - 413, -1, -1, 317, -1, -1, -1, 321, 421, 323, - -1, 424, -1, -1, -1, -1, -1, 430, 256, 333, - -1, -1, 336, -1, 338, -1, -1, 265, 342, 267, - -1, -1, 270, -1, -1, -1, -1, 275, -1, -1, - -1, 279, -1, 0, -1, -1, -1, -1, 362, -1, - 288, -1, -1, -1, -1, 369, 370, 295, -1, -1, - 1169, -1, 300, 256, -1, -1, 304, -1, 261, 262, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, -1, -1, -1, 322, -1, -1, 801, -1, -1, - -1, 284, 330, 331, -1, -1, 334, 1206, -1, 337, - -1, -1, 1211, -1, 297, 298, 1215, -1, -1, 302, - -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, 1232, 317, -1, -1, -1, 321, -1, - -1, -1, 325, -1, -1, 1244, -1, -1, -1, -1, - 333, -1, -1, 336, -1, 338, 339, -1, -1, -1, - 343, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 1232, 362, - 363, -1, -1, -1, -1, 368, 369, 370, 371, 372, - 373, 419, 375, 376, 377, -1, 379, 380, 1297, -1, - 383, 384, 385, 386, -1, 1304, 1305, 390, 391, -1, - -1, -1, 395, 396, 397, 398, 399, 400, 401, 402, - 1319, -1, 0, 265, -1, 267, -1, -1, 270, -1, - 272, 414, -1, 275, 417, -1, 419, 279, 421, -1, - -1, 424, -1, 1297, -1, -1, 288, 430, -1, -1, - -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, - 302, -1, 304, -1, -1, 1319, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 981, -1, -1, - 322, 323, 1381, 1382, 1383, -1, -1, -1, 330, 331, - -1, 1390, 334, -1, -1, 337, -1, -1, -1, -1, - 1399, 1400, -1, 1402, -1, -1, -1, -1, -1, 256, - -1, -1, -1, -1, 261, 262, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1381, 1427, 1383, - -1, 1430, -1, -1, -1, -1, 1390, 284, -1, -1, - -1, -1, -1, -1, -1, 1399, 1400, -1, 1402, -1, - 297, 298, -1, -1, -1, 302, -1, -1, 305, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, 1427, 321, -1, 1430, 419, 325, -1, - -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, - 0, 338, 339, -1, -1, -1, 343, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, -1, 362, 363, 364, -1, -1, - -1, 368, 369, -1, 371, 372, 373, 374, 375, 376, - 377, -1, 379, 380, -1, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391, -1, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, -1, -1, - 417, -1, 419, -1, 421, -1, -1, 424, 256, 257, - -1, -1, -1, 430, -1, -1, 264, 265, 266, 267, - 268, -1, 270, 271, -1, 273, 274, 275, 276, 277, - 278, 279, 280, -1, -1, -1, -1, 285, -1, 287, - 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, - 0, 299, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, - 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, - -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, + -1, -1, -1, 418, 419, 420, -1, 362, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, -1, -1, -1, -1, -1, -1, + 256, -1, 1044, -1, -1, -1, -1, -1, -1, 265, + -1, 267, -1, 1122, 270, -1, -1, -1, -1, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 300, -1, 1088, -1, 304, -1, + 1159, -1, -1, 1162, -1, -1, 1165, 592, -1, -1, + 316, -1, 318, -1, -1, -1, 322, -1, -1, -1, + -1, -1, -1, -1, 330, 331, -1, -1, 334, -1, + 1122, 337, 257, -1, -1, -1, 261, -1, 623, -1, + -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, + 545, -1, 277, -1, -1, -1, 281, -1, -1, 284, + -1, 1290, 1221, -1, 0, -1, -1, 1159, -1, -1, + 1162, 296, 297, 1165, -1, -1, 301, 302, -1, -1, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, -1, 321, 682, 323, -1, + -1, -1, -1, 261, -1, 1264, -1, -1, 333, -1, + 1269, 336, -1, 338, 1273, -1, 422, 342, -1, -1, + -1, -1, -1, -1, -1, -1, 284, -1, 1357, 1221, + -1, -1, 0, 628, -1, -1, -1, 362, -1, 297, + -1, -1, -1, 1302, 302, -1, 371, 372, 373, 307, + 1379, 309, 310, 311, 312, -1, 741, -1, -1, 317, + 745, -1, -1, 321, -1, -1, -1, 325, -1, -1, + -1, -1, 1264, -1, -1, 333, -1, 1269, 336, -1, + 338, 1273, -1, -1, 679, 680, 771, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, 1290, -1, + -1, -1, 697, -1, 362, 1364, 1365, -1, -1, -1, + 1302, -1, 1441, -1, 1443, -1, -1, -1, -1, -1, + -1, 1450, -1, -1, -1, -1, -1, -1, -1, -1, + 1459, 1460, -1, 1462, -1, -1, -1, -1, -1, 1468, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - 368, 369, -1, -1, 372, -1, -1, -1, -1, 377, - 378, 379, 380, 381, -1, -1, -1, 385, -1, 387, - -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, + -1, 1480, -1, -1, -1, -1, 1485, 256, 1487, 844, + -1, 1490, -1, -1, 422, 1357, 265, -1, 267, -1, + 1499, 270, 1364, 1365, -1, -1, 275, -1, 863, -1, + 279, -1, -1, 1442, -1, -1, -1, 1379, -1, 288, + -1, -1, 1521, -1, -1, -1, 295, -1, 883, -1, + -1, 300, 887, -1, -1, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 815, 257, -1, 322, -1, 261, -1, -1, -1, -1, + -1, 330, 331, -1, -1, 334, 272, -1, 337, -1, + -1, 277, -1, -1, -1, 281, -1, -1, 284, 1441, + 1442, 1443, -1, -1, -1, -1, -1, -1, 1450, -1, + 296, 297, -1, -1, -1, 301, 302, 1459, 1460, 0, + 1462, 307, 957, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, -1, 321, -1, 323, -1, 257, + 975, 976, -1, 261, -1, 1487, -1, 333, 1490, 335, + 336, -1, 338, -1, 272, -1, 342, -1, -1, 277, + -1, -1, -1, 281, -1, -1, 284, -1, -1, -1, + -1, -1, -1, 422, -1, -1, 362, -1, 296, 297, + -1, -1, -1, 301, 302, -1, 372, 373, -1, 307, + -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, + -1, 256, -1, 321, -1, 323, 261, 262, -1, 1044, + -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, + 338, -1, -1, -1, 342, -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 297, 298, 362, 1080, -1, 302, -1, -1, + 305, -1, 307, 1088, 309, 310, 311, 312, 1003, -1, + -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, + 325, -1, -1, -1, 0, -1, -1, -1, 333, -1, + -1, 336, -1, 338, 339, -1, -1, -1, 343, 344, + -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, -1, -1, -1, 1051, 362, 363, 364, + -1, 366, 367, -1, -1, -1, 371, 372, -1, 374, + 375, 376, 377, 378, 379, 380, -1, 382, 383, -1, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, -1, -1, 420, -1, 422, -1, 424, + -1, -1, 427, -1, -1, 256, 257, -1, 433, -1, + -1, -1, -1, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, 274, 275, 276, 277, 278, 279, 280, + 0, -1, -1, -1, 285, -1, 287, 288, 289, 290, + 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, + -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 1290, 337, -1, -1, 340, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + 371, 372, -1, -1, 375, -1, -1, -1, -1, 380, + 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, + -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, + -1, -1, 1357, -1, -1, -1, -1, -1, -1, -1, + 0, 257, -1, -1, -1, 261, -1, -1, -1, -1, + 421, 422, 423, 424, 1379, 426, 272, -1, -1, -1, + -1, 277, 433, -1, -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 418, 419, 420, 421, -1, 423, 256, 257, -1, -1, - -1, 0, 430, -1, 264, 265, 266, 267, 268, -1, + 296, 297, -1, -1, -1, 301, 302, -1, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, -1, 321, -1, 323, -1, -1, + -1, -1, -1, -1, -1, -1, 1441, 333, 1443, -1, + 336, -1, 338, -1, -1, 1450, 342, -1, -1, -1, + -1, -1, -1, -1, 1459, 1460, -1, 1462, -1, -1, + -1, -1, -1, -1, -1, -1, 362, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 372, 373, -1, -1, + -1, -1, 1487, -1, -1, 1490, 256, 257, -1, -1, + -1, -1, -1, -1, 264, 265, 266, 267, 268, -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, + 0, -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, @@ -13451,110 +13894,132 @@ void case_1078() 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 0, -1, 368, 369, - -1, -1, 372, -1, -1, -1, -1, 377, 378, 379, - 380, 381, -1, -1, -1, 385, 256, 387, -1, -1, - -1, 261, 262, 393, 394, -1, -1, -1, -1, -1, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, 371, 372, -1, -1, 375, -1, -1, -1, -1, + 380, 381, 382, 383, 384, -1, 256, -1, 388, -1, + 390, 261, 262, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 284, -1, -1, -1, 418, 419, - 420, 421, -1, 423, -1, -1, -1, 297, 298, -1, - 430, -1, 302, -1, -1, 305, -1, 307, -1, 309, + -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, + -1, 421, 422, 423, 424, -1, 426, 297, 298, -1, + 0, -1, 302, 433, -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, - -1, 0, -1, 343, 344, -1, 346, 347, 348, 349, + -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, + -1, -1, 362, 363, -1, -1, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, + 390, -1, -1, 393, 394, -1, -1, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 256, -1, -1, -1, + -1, 261, 262, -1, -1, -1, -1, 417, -1, -1, + 420, -1, 422, -1, 424, 357, -1, 427, -1, -1, + -1, 363, 364, 433, 284, -1, -1, -1, -1, 371, + -1, 373, -1, 375, 376, 377, 378, 297, 298, -1, + 0, -1, 302, -1, -1, 305, -1, 307, 390, 309, + 310, 311, 312, -1, 396, 397, -1, 317, -1, -1, + -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, 333, 416, -1, 336, -1, 338, 339, + 422, -1, 424, 343, 344, 427, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 362, 363, -1, -1, -1, -1, 368, 369, - 370, 371, 372, 373, -1, 375, 376, 377, -1, 379, - 380, -1, -1, 383, 384, 385, 386, 256, -1, -1, - 390, 391, 261, 262, -1, 395, 396, 397, 398, 399, - 400, 401, 402, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 414, 284, -1, 417, -1, 419, - -1, 421, -1, -1, 424, -1, -1, -1, 297, 298, - 430, -1, -1, 302, -1, -1, 305, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, - -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, - 339, -1, -1, -1, 343, 344, -1, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 256, 362, 363, -1, -1, -1, 262, 368, - 369, -1, 371, 372, 373, -1, 375, 376, 377, -1, - 379, 380, 0, -1, 383, 384, 385, 386, -1, -1, - -1, 390, 391, -1, -1, -1, 395, 396, 397, 398, - 399, 400, 401, 402, 298, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 414, -1, -1, 417, -1, - 419, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 339, -1, -1, -1, 343, + -1, -1, 362, 363, -1, -1, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, + -1, -1, -1, 393, 394, -1, -1, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 256, -1, 0, -1, + -1, 261, 262, -1, -1, -1, -1, 417, -1, -1, + 420, -1, 422, -1, 424, -1, -1, 427, -1, -1, + -1, -1, -1, 433, 284, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 297, 298, -1, + -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, + -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, 362, 363, -1, -1, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, + -1, -1, -1, 393, 394, -1, -1, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 256, -1, 0, -1, + -1, 261, 262, -1, -1, -1, -1, 417, -1, -1, + 420, -1, 422, -1, 424, -1, -1, 427, -1, -1, + -1, -1, -1, 433, 284, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 297, 298, -1, + -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, + -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, 362, 363, 256, -1, 366, 367, -1, -1, + 262, 371, 372, -1, 374, 375, 376, -1, 378, 379, + 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, + -1, -1, -1, 393, 394, -1, -1, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 298, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 417, -1, -1, + 420, -1, 422, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, 433, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, + -1, 343, 344, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, -1, -1, -1, + -1, 363, 256, -1, 366, 367, -1, -1, -1, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, -1, + 382, 383, -1, -1, 386, 387, 388, 389, 390, -1, + -1, 393, 394, -1, -1, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 256, -1, -1, -1, -1, -1, + 262, -1, -1, -1, -1, 417, -1, -1, 420, 0, + 422, -1, 424, -1, -1, 427, -1, -1, -1, -1, + -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 339, 298, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, -1, -1, -1, 256, -1, 363, - -1, -1, -1, 262, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, -1, 379, 380, -1, -1, 383, - 384, 385, 386, 387, -1, -1, 390, 391, 0, -1, - -1, 395, 396, 397, 398, 399, 400, 401, 402, 298, + 354, 355, 356, -1, -1, -1, 0, -1, -1, -1, + -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, + 374, -1, 376, -1, 378, 379, 380, 339, -1, -1, + -1, 343, 344, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, + -1, 363, -1, 0, 366, 367, -1, -1, -1, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, -1, + 382, 383, -1, -1, 386, 387, 388, 389, -1, 433, + -1, 393, 394, -1, -1, -1, 398, 399, 400, 401, + 402, 403, 404, 405, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, 417, -1, -1, 420, -1, + 422, -1, 424, 256, 257, 427, -1, -1, 261, -1, + -1, 433, 265, -1, 267, -1, -1, 270, -1, 272, + 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, + 283, 284, -1, -1, 287, 288, -1, 0, -1, -1, + 293, -1, 295, 296, 297, -1, -1, 300, 301, 302, + -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, + 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, + 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 414, -1, -1, 417, -1, 419, -1, 421, -1, -1, - 424, -1, -1, -1, -1, -1, 430, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, - 339, -1, -1, -1, 343, 344, -1, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, -1, -1, 363, -1, -1, -1, -1, 368, - 369, 370, 371, 372, 373, -1, 375, 376, 377, -1, - 379, 380, -1, -1, 383, 384, 385, 386, -1, -1, - -1, 390, 391, -1, -1, -1, 395, 396, 397, 398, - 399, 400, 401, 402, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, 414, -1, -1, 417, -1, - 419, -1, 421, -1, -1, 424, -1, -1, 256, 257, - -1, 430, -1, 261, -1, -1, -1, 265, -1, 267, - -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, - -1, 279, -1, 281, 282, 283, 284, -1, 0, 287, - 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, - -1, -1, 300, 301, 302, -1, 304, -1, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, - 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, - -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, - 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 362, -1, -1, -1, -1, -1, - 368, 369, 370, -1, -1, 257, -1, -1, -1, 261, - 378, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 272, -1, -1, -1, 0, 277, -1, -1, -1, 281, - -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 296, 297, -1, -1, 257, 301, - 302, 419, 261, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, 272, -1, 317, -1, 0, 277, 321, - -1, 323, 281, -1, -1, 284, -1, -1, -1, -1, - -1, 333, -1, -1, 336, -1, 338, 296, 297, -1, - 342, -1, 301, 302, -1, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - 362, -1, 321, -1, 323, -1, -1, 369, 370, -1, - -1, -1, -1, -1, 333, -1, -1, 336, 257, 338, - 0, -1, 261, 342, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, -1, -1, -1, -1, 277, -1, - -1, -1, 281, 362, -1, 284, -1, -1, -1, -1, - -1, 370, -1, -1, -1, -1, -1, 296, 297, -1, - -1, -1, 301, 302, -1, 257, -1, -1, 307, 261, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - 272, -1, 321, -1, 323, 277, -1, -1, -1, 281, - -1, -1, 284, -1, 333, -1, -1, 336, -1, 338, - -1, -1, -1, 342, 296, 297, -1, -1, -1, 301, - 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, 362, -1, 317, -1, -1, 257, 321, - -1, 323, 261, -1, -1, -1, -1, -1, -1, -1, - -1, 333, -1, 272, 336, -1, 338, -1, 277, -1, - 342, -1, 281, -1, -1, 284, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 296, 297, -1, - 362, 257, 301, 302, -1, 261, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, 272, -1, 317, -1, - -1, 277, 321, -1, 323, 281, -1, -1, 284, -1, - -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, - 296, 297, -1, 342, 257, 301, 302, -1, 261, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, 272, - -1, 317, -1, 362, 277, 321, -1, 323, 281, -1, - -1, 284, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, 296, 297, -1, 342, -1, 301, 302, + 0, -1, -1, -1, -1, -1, 257, -1, -1, 362, + 261, -1, -1, -1, -1, -1, -1, -1, 371, 372, + 373, 272, -1, -1, -1, -1, 277, -1, 381, -1, + 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 296, 297, -1, -1, -1, + 301, 302, -1, 257, -1, -1, 307, 261, 309, 310, + 311, 312, -1, -1, -1, -1, 317, -1, 272, 422, + 321, -1, 323, 277, -1, -1, -1, 281, -1, -1, + 284, -1, 333, -1, -1, 336, -1, 338, -1, -1, + -1, 342, 296, 297, -1, -1, -1, 301, 302, -1, + 257, -1, -1, 307, 261, 309, 310, 311, 312, -1, + -1, 362, -1, 317, -1, 272, -1, 321, -1, 323, + 277, 372, 373, -1, 281, -1, -1, 284, -1, 333, + -1, -1, 336, -1, 338, -1, -1, -1, 342, 296, + 297, -1, -1, -1, 301, 302, -1, 257, -1, -1, + 307, 261, 309, 310, 311, 312, -1, -1, 362, -1, + 317, -1, 272, -1, 321, -1, 323, 277, -1, 373, + -1, 281, -1, -1, 284, -1, 333, -1, -1, 336, + -1, 338, -1, -1, -1, 342, 296, 297, -1, -1, + -1, 301, 302, -1, 257, -1, -1, 307, 261, 309, + 310, 311, 312, -1, -1, 362, -1, 317, -1, 272, + -1, 321, -1, 323, 277, -1, -1, -1, 281, -1, + -1, 284, -1, 333, -1, -1, 336, -1, 338, -1, + -1, -1, 342, 296, 297, -1, -1, -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, -1, 317, -1, 362, 257, 321, -1, + -1, -1, 362, -1, 317, -1, -1, 257, 321, -1, 323, 261, -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, 272, 336, -1, 338, -1, 277, -1, 342, -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, @@ -13571,57 +14036,58 @@ void case_1078() -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, - 341, -1, -1, 344, 345, 256, -1, -1, -1, 261, - -1, 262, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, 368, -1, -1, - -1, 372, 284, -1, -1, -1, 377, 378, 379, 380, - 381, -1, -1, -1, 385, 297, 387, 298, -1, -1, - 302, -1, 393, 394, -1, 307, -1, 309, 310, 311, - 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, - -1, -1, -1, 325, -1, -1, -1, 418, 419, 420, - 421, 333, -1, -1, 336, -1, 338, -1, 339, 430, - -1, -1, -1, 344, 256, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, -1, -1, - 362, -1, 363, 364, -1, -1, -1, -1, 369, 370, - 371, 372, 373, 374, 375, 376, 377, -1, 379, 380, - -1, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, -1, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, -1, 256, 419, 419, -1, - 421, 422, 262, 424, -1, -1, -1, 339, -1, 430, - -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 369, 298, 371, - -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, - -1, 383, 384, 385, 386, -1, -1, -1, 390, 391, - -1, -1, -1, 395, 396, 397, 398, 399, 400, 401, - 402, -1, -1, -1, -1, -1, -1, -1, -1, 339, - -1, -1, 414, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 430, -1, - -1, -1, -1, 363, 364, -1, -1, -1, -1, 369, - 370, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 256, 256, -1, 419, - -1, 421, 262, -1, 424, -1, 265, -1, 267, -1, - 430, 270, -1, -1, -1, -1, 275, -1, -1, -1, - 279, -1, -1, -1, -1, -1, -1, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, 298, -1, - -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, - -1, 330, 331, -1, -1, 334, -1, -1, 337, 339, - -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, + 341, -1, -1, 344, 345, -1, 256, -1, -1, -1, + -1, -1, 262, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + 371, -1, -1, -1, 375, -1, -1, -1, -1, 380, + 381, 382, 383, 384, -1, -1, -1, 388, 298, 390, + -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 256, -1, -1, -1, -1, -1, 262, + 421, 422, 423, 424, -1, -1, -1, -1, -1, 339, + -1, -1, 433, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, - -1, -1, -1, 363, 364, -1, -1, -1, -1, 369, - 370, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, + -1, -1, -1, 363, 364, 298, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, -1, 382, 383, -1, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, -1, 256, 256, -1, 419, - 419, 421, 262, -1, 424, -1, 265, -1, 267, -1, - 430, 270, -1, -1, -1, -1, 275, -1, -1, -1, + 410, 411, 412, 413, 414, 415, 416, 417, 418, -1, + 256, -1, 422, -1, 424, 425, 262, 427, -1, -1, + 363, 364, -1, 433, -1, -1, -1, -1, -1, 372, + 373, -1, 375, 376, 377, 378, -1, 380, -1, 382, + 383, -1, 385, 386, 387, 388, 389, -1, 391, 392, + 393, 394, 298, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, -1, -1, -1, -1, 422, + -1, 424, -1, -1, 427, -1, -1, -1, -1, -1, + 433, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, -1, -1, -1, -1, 363, 364, -1, + 366, 367, -1, -1, -1, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 256, 382, 383, -1, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, -1, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 256, -1, -1, 422, -1, 424, 262, + -1, 427, -1, -1, -1, -1, -1, 433, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 298, -1, -1, 339, -1, + -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 366, 367, -1, -1, -1, + -1, 372, -1, 374, -1, 376, 339, 378, 379, 380, + -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, -1, -1, -1, -1, + 363, 364, -1, 366, 367, -1, -1, -1, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, -1, 382, + 383, -1, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 433, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, -1, 256, 256, -1, 422, + -1, 424, 262, -1, 427, -1, 265, -1, 267, -1, + 433, 270, -1, -1, -1, -1, 275, -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, 298, -1, -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, @@ -13629,389 +14095,413 @@ void case_1078() -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, -1, -1, 334, -1, -1, 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, -1, 363, 364, -1, -1, -1, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, -1, 256, -1, -1, 419, - 419, 421, 262, -1, -1, 261, -1, -1, -1, -1, - 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 284, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 298, -1, - -1, 297, -1, -1, -1, -1, 302, -1, -1, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 333, -1, 339, - 336, -1, 338, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, -1, 363, 364, -1, 362, -1, 368, 369, - -1, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, -1, 256, -1, -1, 419, - 261, 421, 262, 419, 424, -1, -1, -1, -1, -1, - 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 297, -1, 298, -1, - -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, -1, 339, - -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, 362, -1, 363, 364, -1, -1, -1, 369, 369, - -1, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, -1, 256, -1, 419, 419, - 261, 421, 262, -1, 424, -1, -1, -1, -1, -1, - 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 297, -1, 298, -1, - -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, -1, 339, - -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, 362, -1, 363, 364, -1, -1, -1, 369, 369, - -1, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, -1, 256, -1, 419, 419, - -1, 421, 262, -1, 424, -1, 265, -1, 267, -1, - 430, 270, -1, 272, 273, -1, 275, -1, 277, -1, - 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, - -1, -1, -1, -1, 293, -1, 295, 296, 298, -1, - -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - -1, -1, -1, 322, 323, -1, -1, -1, -1, -1, - -1, 330, 331, -1, -1, 334, -1, -1, 337, 339, - -1, -1, -1, 342, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, -1, 363, 364, -1, -1, -1, -1, 369, - -1, 371, 372, 373, 374, 375, 376, 377, -1, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, -1, 256, -1, -1, 419, - 419, 421, 262, -1, 424, -1, 265, -1, 267, -1, - 430, 270, -1, -1, 273, -1, 275, -1, 277, -1, - 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, - -1, -1, -1, -1, 293, -1, 295, -1, 298, -1, - -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 256, -1, -1, 322, -1, -1, 262, -1, -1, -1, - 266, 330, 331, -1, -1, 334, -1, -1, 337, 339, - -1, -1, -1, 342, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 298, 363, -1, -1, -1, -1, -1, 369, - -1, 371, -1, 373, -1, 375, 376, 377, 314, 379, - 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, -1, -1, 395, 396, 397, 398, 399, + 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, + -1, -1, -1, 363, 364, -1, 366, 367, -1, -1, + -1, -1, 372, 373, 374, 375, 376, 377, 378, 379, + 380, -1, 382, 383, -1, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, -1, 414, 256, -1, -1, -1, 419, - 419, 357, -1, -1, -1, -1, -1, 363, 364, -1, - 430, -1, -1, 369, 370, 371, 372, 373, 374, 375, - 376, 377, -1, 379, 380, 285, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, -1, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, -1, - 256, -1, -1, 419, -1, 421, 262, 327, 424, -1, - -1, -1, -1, -1, 430, -1, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - -1, -1, 298, -1, -1, -1, -1, -1, 369, -1, - 371, -1, 373, -1, 375, 376, 377, -1, 378, 379, - 380, 381, -1, 383, 384, 385, 386, 387, 388, 389, - 390, -1, -1, 393, 394, 395, 396, 397, 398, 399, - 400, -1, -1, 339, -1, -1, -1, -1, 344, -1, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 256, -1, 363, 364, 430, - -1, 262, -1, 369, 370, 371, 372, 373, 374, 375, - 376, 377, -1, 379, 380, -1, -1, 383, 384, 385, - 386, -1, -1, -1, 390, 391, -1, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 298, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 413, 414, -1, - -1, -1, -1, 419, 256, 421, -1, -1, 424, -1, - 262, -1, -1, -1, 430, -1, -1, -1, -1, -1, + 410, 411, 412, 413, 414, 415, 416, 417, -1, 256, + -1, -1, 422, 422, 424, 262, -1, 427, -1, -1, + -1, 261, -1, 433, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, + -1, 298, -1, -1, -1, -1, -1, 297, -1, -1, + -1, -1, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 339, 333, -1, -1, 336, 344, 338, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, 256, -1, -1, -1, -1, 364, -1, 366, + 367, -1, 362, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, -1, 382, 383, -1, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, -1, 256, -1, -1, -1, -1, 424, 262, -1, + -1, -1, 422, -1, -1, -1, 433, -1, -1, -1, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, 298, -1, -1, -1, -1, -1, + -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, + 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 394, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 405, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 417, -1, 256, -1, -1, -1, -1, + 364, -1, 366, 367, -1, -1, -1, 371, 372, 433, + 374, 375, 376, 377, 378, 379, 380, -1, 382, 383, + -1, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, -1, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, -1, 256, -1, -1, -1, -1, + 424, 262, -1, 427, -1, -1, -1, -1, -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 298, -1, -1, -1, - -1, -1, 363, 364, -1, -1, -1, -1, 369, -1, - 371, 372, 373, 374, 375, 376, 377, -1, 379, 380, - -1, -1, 383, 384, 385, 386, -1, -1, -1, 390, - 391, -1, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, -1, 256, -1, -1, -1, -1, -1, 262, - -1, -1, 413, 414, -1, -1, -1, -1, 419, -1, - 421, 363, 364, 424, -1, -1, -1, 369, 370, 430, - 372, 373, 374, 375, -1, 377, -1, 379, 380, -1, - 382, 383, 384, 385, 386, 298, 388, 389, 390, 391, - -1, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 351, 352, 353, 354, 355, 356, -1, 298, -1, -1, + -1, -1, -1, -1, -1, 366, 367, -1, -1, -1, + -1, 372, -1, 374, -1, 376, -1, 378, 379, 380, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 394, -1, -1, -1, -1, 339, -1, + -1, -1, -1, 344, 405, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 417, -1, 256, -1, + -1, -1, -1, 364, -1, 366, 367, -1, -1, -1, + -1, 372, 433, 374, 375, 376, 377, 378, 379, 380, + -1, 382, 383, -1, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, -1, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, -1, 256, -1, + -1, -1, -1, 424, 262, -1, 427, -1, -1, -1, + -1, -1, 433, -1, -1, -1, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + 298, -1, -1, -1, -1, -1, -1, -1, 366, 367, + -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 394, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, 364, -1, 366, 367, + -1, -1, -1, -1, 372, 433, 374, 375, 376, 377, + 378, 379, 380, -1, 382, 383, -1, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, -1, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + -1, 256, -1, -1, 261, -1, 424, 262, -1, 427, + -1, -1, -1, -1, -1, 433, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 284, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 297, -1, -1, 298, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, -1, -1, 339, -1, -1, -1, -1, 344, + -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, -1, -1, 362, -1, -1, -1, 364, + -1, 366, 367, -1, -1, 372, -1, 372, -1, 374, + 375, 376, 377, 378, 379, 380, -1, 382, 383, -1, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, -1, 256, 422, 261, -1, -1, 424, + 262, -1, 427, -1, -1, -1, -1, -1, 433, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 297, -1, -1, -1, 298, 302, -1, -1, + 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, -1, 321, 256, -1, -1, + 325, -1, -1, 262, -1, -1, -1, 266, 333, -1, + -1, 336, -1, 338, -1, -1, -1, 339, -1, -1, + -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, 362, -1, 298, + -1, -1, -1, -1, 366, 367, -1, 372, -1, -1, + 372, -1, 374, -1, 376, 314, 378, 379, 380, -1, + 382, 383, -1, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, -1, -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, -1, -1, -1, -1, 419, -1, 421, - -1, -1, 424, -1, -1, -1, 339, -1, 430, -1, + 412, 413, 414, 415, 256, 417, -1, 422, 357, -1, + 262, -1, -1, -1, 363, 364, -1, -1, -1, -1, + -1, 433, -1, 372, 373, 374, 375, 376, 377, 378, + 379, 380, -1, 382, 383, -1, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 298, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, -1, + -1, -1, -1, 422, -1, 424, -1, -1, 427, -1, + -1, -1, -1, -1, 433, -1, -1, 339, -1, -1, + -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, + -1, 363, 364, 256, 366, 367, -1, -1, -1, 262, + 372, 373, 374, -1, 376, 377, 378, 379, 380, -1, + 382, 383, -1, -1, 386, 387, 388, 389, -1, -1, + -1, 393, 394, -1, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, -1, 298, -1, -1, -1, -1, + -1, -1, -1, -1, 416, 417, -1, -1, -1, -1, + 422, -1, 424, -1, -1, 427, -1, -1, -1, -1, + -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 256, -1, - 363, -1, -1, -1, 262, -1, 369, 370, 371, -1, - 373, -1, 375, 376, 377, -1, 379, 380, -1, -1, - 383, 384, 385, 386, -1, -1, -1, 390, 391, -1, - -1, -1, 395, 396, 397, 398, 399, 400, 401, 402, + 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, + -1, 364, 256, 366, 367, -1, -1, -1, 262, 372, + -1, 374, 375, 376, 377, 378, 379, 380, -1, 382, + 383, -1, -1, 386, 387, 388, 389, -1, -1, -1, + 393, 394, -1, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, -1, 298, -1, -1, -1, -1, -1, + -1, -1, -1, 416, 417, -1, -1, -1, -1, -1, + -1, 424, -1, -1, 427, -1, -1, -1, -1, -1, + 433, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, + 364, 256, 366, 367, -1, -1, -1, 262, 372, -1, + 374, 375, 376, 377, 378, 379, 380, -1, 382, 383, + -1, -1, 386, 387, 388, 389, -1, -1, -1, 393, + 394, -1, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, -1, 298, -1, -1, -1, -1, -1, -1, + -1, -1, 416, 417, -1, -1, -1, -1, -1, -1, + 424, -1, -1, 427, -1, -1, -1, -1, -1, 433, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, + -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, -1, -1, -1, -1, -1, -1, 364, + 256, 366, 367, -1, -1, -1, 262, 372, -1, 374, + 375, 376, 377, 378, 379, 380, -1, 382, 383, -1, + -1, 386, 387, 388, 389, -1, -1, -1, 393, 394, + -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, -1, 298, -1, -1, -1, -1, -1, -1, -1, + -1, 416, 417, -1, -1, -1, -1, -1, -1, 424, + -1, -1, 427, -1, -1, -1, -1, -1, 433, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, -1, -1, 363, 256, -1, + 366, 367, -1, -1, 262, -1, 372, 373, 374, -1, + 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, + 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, + -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 414, -1, -1, -1, -1, 419, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 430, -1, -1, + -1, 417, -1, -1, -1, -1, 422, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 369, 298, 371, -1, 373, -1, 375, 376, 377, - -1, 379, 380, -1, -1, 383, 384, 385, 386, 387, - 388, 389, 390, 391, -1, -1, -1, 395, 396, 397, - 398, 399, 400, 401, 402, -1, -1, -1, -1, -1, - -1, -1, -1, 339, -1, -1, 414, -1, 344, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, + -1, -1, 298, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, 382, 383, -1, -1, 386, 387, + 388, 389, 390, 391, 392, 393, 394, -1, -1, -1, + 398, 399, 400, 401, 402, 403, 404, 405, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, 430, -1, -1, 256, -1, 363, -1, -1, - -1, 262, -1, 369, -1, 371, -1, 373, -1, 375, - 376, 377, -1, 379, 380, -1, -1, 383, 384, 385, - 386, -1, -1, -1, 390, 391, -1, -1, -1, 395, - 396, 397, 398, 399, 400, 401, 402, 298, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 414, -1, - -1, -1, -1, 419, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 430, -1, -1, 256, -1, -1, - -1, -1, -1, 262, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 369, 298, - 371, -1, 373, -1, 375, 376, 377, -1, 379, 380, - -1, -1, 383, 384, 385, 386, -1, -1, -1, 390, - 391, -1, -1, -1, 395, 396, 397, 398, 399, 400, - 401, 402, -1, -1, -1, -1, -1, -1, -1, -1, - 339, -1, -1, 414, -1, 344, -1, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, 430, - -1, -1, 256, -1, -1, -1, -1, -1, 262, -1, - 369, -1, 371, -1, 373, -1, 375, 376, 377, -1, - 379, 380, -1, -1, 383, 384, 385, 386, -1, -1, - -1, 390, 391, -1, -1, -1, 395, 396, 397, 398, - 399, 400, 401, 402, 298, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 414, -1, -1, -1, -1, + 356, -1, -1, -1, -1, 433, -1, 363, 256, -1, + 366, 367, -1, -1, 262, -1, 372, -1, 374, -1, + 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, + 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, + -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 417, -1, -1, -1, -1, 422, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, + 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, + -1, -1, 298, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, 382, 383, -1, -1, 386, 387, + 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, + 398, 399, 400, 401, 402, 403, 404, 405, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 433, -1, -1, 256, -1, + 366, 367, -1, -1, 262, -1, 372, -1, 374, -1, + 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, + 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, + -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 417, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, + 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, + -1, -1, 298, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, 382, 383, -1, -1, 386, 387, + 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, + 398, 399, 400, 401, 402, 403, 404, 405, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 433, -1, -1, -1, -1, + 366, 367, -1, -1, -1, -1, 372, -1, 374, -1, + 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, + 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, + -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, + -1, 256, -1, 256, -1, -1, -1, -1, -1, 264, + 265, 417, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, 433, -1, -1, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 430, -1, -1, 256, -1, -1, -1, -1, -1, - 262, -1, -1, -1, -1, 339, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, + -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 359, 360, 361, 362, 363, 256, + -1, 366, 367, 366, 367, -1, -1, -1, -1, 372, + 375, 374, -1, 376, -1, 378, 379, 380, -1, -1, + -1, -1, -1, 386, 387, 388, 389, -1, -1, -1, + 393, 394, -1, -1, -1, 398, 399, 400, 401, 402, + 403, 404, 405, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 417, -1, 421, 422, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 432, 433, -1, + 433, 256, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, + 367, -1, -1, -1, -1, 372, -1, 374, -1, 376, + -1, 378, 379, 380, -1, -1, -1, -1, -1, 386, + 387, 388, 389, -1, -1, -1, 393, 394, -1, -1, + -1, 398, 399, 400, 401, 402, 403, 404, 405, -1, + -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, + 417, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 256, -1, -1, -1, 433, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, 372, -1, 374, + -1, 376, -1, 378, 379, 380, -1, -1, -1, -1, + -1, 386, 387, 388, 389, -1, -1, -1, 393, 394, + -1, -1, -1, 398, 399, 400, 401, 402, 403, 404, + 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 417, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, -1, -1, 433, -1, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 369, 298, 371, -1, 373, - -1, 375, 376, 377, -1, 379, 380, -1, -1, 383, - 384, 385, 386, -1, -1, -1, 390, 391, -1, -1, - -1, 395, 396, 397, 398, 399, 400, 401, 402, -1, - -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, - 414, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, 430, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 369, -1, 371, - -1, 373, -1, 375, 376, 377, -1, 379, 380, -1, - -1, 383, 384, 385, 386, -1, -1, -1, 390, 391, - -1, -1, -1, 395, 396, 397, 398, 399, 400, 401, - 402, -1, 256, -1, 256, -1, -1, -1, -1, -1, - 264, 265, 414, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, -1, 430, -1, - -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, -1, -1, -1, -1, 339, -1, 256, - -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, 369, 372, 371, - -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, - -1, 383, 384, 385, 386, -1, -1, -1, 390, 391, - -1, -1, -1, 395, 396, 397, 398, 399, 400, 401, - 402, -1, -1, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 414, -1, 418, 419, -1, -1, -1, -1, - -1, -1, 339, -1, -1, 429, 430, 344, 430, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 369, -1, 371, -1, 373, -1, 375, 376, - 377, -1, -1, -1, -1, -1, 383, 384, 385, 386, - -1, -1, -1, 390, 391, -1, -1, 256, 395, 396, - 397, 398, 399, 400, 401, 402, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, 414, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, - -1, 369, -1, 371, -1, 373, -1, 375, 376, 377, - -1, -1, -1, -1, -1, 383, 384, 385, 386, -1, - -1, -1, 390, 391, -1, -1, 256, -1, -1, 397, - 398, 399, 400, 401, 402, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 414, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, - 369, -1, 371, -1, 373, -1, 375, 376, 377, -1, - -1, -1, -1, -1, 383, 384, 385, 386, -1, -1, - -1, 390, 391, -1, -1, 256, -1, -1, 397, 398, - 399, 400, 401, 402, -1, -1, -1, -1, -1, 339, - -1, -1, -1, -1, 344, 414, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, 430, -1, -1, -1, -1, -1, -1, -1, 369, - -1, 371, -1, 373, -1, 375, 376, 377, -1, -1, - -1, -1, -1, 383, 384, 385, 386, -1, -1, -1, - 390, 391, -1, -1, 256, -1, -1, 397, 398, 399, - 400, 401, 402, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 414, 346, 347, 348, 349, 350, + -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, + 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, + -1, -1, 386, 387, 388, 389, -1, -1, -1, 393, + 394, -1, -1, -1, -1, -1, 400, 401, 402, 403, + 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 256, -1, -1, -1, 433, + -1, -1, -1, -1, 366, 367, -1, -1, -1, -1, + 372, -1, 374, -1, 376, -1, 378, 379, 380, -1, + -1, -1, -1, -1, 386, 387, 388, 389, -1, -1, + -1, 393, 394, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 405, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 417, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 433, -1, -1, -1, -1, -1, -1, 339, -1, + -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 430, -1, -1, -1, -1, -1, -1, -1, 369, -1, - 371, -1, 373, -1, 375, 376, 377, -1, -1, -1, - -1, -1, 383, 384, 385, 386, 256, -1, -1, 390, - 391, -1, 262, -1, -1, -1, 397, 398, 399, 400, - 401, 402, -1, -1, -1, -1, -1, 339, -1, -1, - -1, -1, 344, 414, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, 298, 430, - -1, -1, -1, -1, -1, -1, -1, 369, -1, 371, - -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, - -1, 383, 384, 385, 386, -1, -1, -1, 390, 391, - -1, -1, -1, -1, -1, 397, 398, 399, 400, 401, - 402, -1, -1, 256, -1, -1, -1, -1, -1, -1, - -1, -1, 414, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 364, -1, -1, -1, 430, 369, - -1, -1, 372, -1, 374, 375, -1, -1, -1, 379, - 380, -1, -1, 383, 384, 385, 386, 387, 388, 389, - 390, 391, -1, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 256, 413, 414, -1, -1, -1, -1, -1, - -1, 421, -1, -1, 424, -1, 339, -1, -1, -1, - 430, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 369, -1, 371, -1, - 373, -1, 375, 376, 377, -1, -1, -1, -1, -1, - -1, -1, 385, 386, -1, -1, -1, 390, 391, -1, - -1, 256, -1, -1, -1, -1, 399, 400, 401, 402, - -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, 414, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, 430, -1, -1, - -1, -1, -1, -1, -1, 369, -1, 371, -1, 373, - -1, 375, 376, 377, -1, -1, -1, -1, -1, -1, - -1, 385, 386, -1, -1, -1, 390, 391, -1, -1, - 256, -1, -1, -1, -1, 399, 400, 401, 402, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 414, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 430, -1, -1, -1, - -1, -1, -1, -1, 369, -1, 371, -1, 373, -1, - 375, 376, 377, -1, -1, -1, -1, -1, -1, -1, - 385, 386, -1, -1, -1, 390, 391, -1, -1, 256, - -1, -1, -1, -1, 399, 400, 401, 402, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 414, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 430, -1, -1, -1, -1, - -1, -1, -1, 369, -1, 371, -1, 373, -1, 375, - 376, 377, -1, -1, -1, -1, -1, -1, -1, 385, - 386, -1, -1, -1, 390, 391, -1, -1, 256, -1, - -1, -1, -1, -1, -1, 401, 402, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 414, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 430, -1, -1, -1, -1, -1, - -1, -1, 369, -1, 371, -1, 373, -1, 375, 376, - 377, -1, -1, -1, -1, -1, -1, -1, 385, 386, - -1, -1, -1, 390, 391, -1, -1, 256, -1, -1, - -1, -1, -1, -1, 401, 402, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, 414, 346, 347, + -1, -1, -1, -1, -1, 366, 367, -1, -1, -1, + -1, 372, -1, 374, -1, 376, -1, 378, 379, 380, + -1, -1, -1, -1, -1, 386, 387, 388, 389, -1, + -1, -1, 393, 394, -1, -1, -1, -1, -1, 400, + 401, 402, 403, 404, 405, -1, -1, -1, -1, -1, + 339, -1, -1, -1, -1, 344, 417, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 256, -1, + -1, -1, 433, -1, -1, -1, -1, 366, 367, -1, + -1, -1, -1, 372, -1, 374, -1, 376, -1, 378, + 379, 380, -1, -1, -1, -1, -1, 386, 387, 388, + 389, -1, -1, -1, 393, 394, -1, -1, -1, -1, + -1, 400, 401, 402, 403, 404, 405, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, 417, -1, + -1, -1, -1, 262, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 433, -1, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 298, + -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, + -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, -1, -1, -1, -1, 386, 387, + 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 256, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 417, + -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, + -1, -1, -1, 372, -1, 433, 375, -1, 377, 378, + -1, -1, -1, 382, 383, -1, -1, 386, 387, 388, + 389, 390, 391, 392, 393, 394, -1, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 416, 417, -1, + 256, -1, -1, -1, -1, 424, -1, -1, 427, -1, + -1, 339, -1, -1, 433, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, - -1, 369, -1, 371, -1, 373, -1, 375, 376, 377, - -1, -1, -1, -1, -1, -1, -1, -1, 386, -1, - -1, -1, 390, 391, -1, -1, 256, -1, -1, -1, - -1, -1, -1, 401, 402, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 414, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, - 369, -1, 371, -1, 373, -1, 375, 376, 377, -1, - -1, -1, -1, -1, -1, -1, -1, 386, -1, -1, - -1, 390, 391, -1, -1, 256, -1, -1, -1, -1, - -1, -1, 401, 402, -1, -1, -1, -1, -1, 339, - -1, -1, -1, -1, 344, 414, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, 430, -1, -1, -1, -1, -1, -1, -1, 369, - -1, 371, -1, 373, -1, 375, 376, 377, -1, -1, - -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, - -1, 391, -1, -1, 256, -1, -1, -1, -1, -1, - -1, 401, 402, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 414, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 430, -1, -1, -1, -1, -1, -1, -1, 369, -1, - 371, -1, 373, -1, 375, 376, 377, -1, -1, -1, - -1, -1, -1, -1, -1, 386, -1, -1, -1, -1, - 391, -1, -1, 256, -1, -1, -1, -1, -1, -1, - 401, 402, -1, -1, -1, -1, -1, 339, -1, -1, - -1, -1, 344, 414, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, 430, - -1, -1, -1, -1, -1, -1, -1, 369, -1, 371, - -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, - -1, -1, 256, -1, -1, -1, -1, -1, -1, 401, - 402, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 414, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 430, -1, - -1, -1, -1, -1, -1, -1, 369, -1, 371, -1, - 373, -1, 375, 376, 377, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, - -1, 256, -1, -1, -1, -1, -1, -1, 401, 402, + -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, + -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, + 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, + -1, -1, 256, -1, 402, 403, 404, 405, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 433, -1, -1, -1, -1, + 366, 367, -1, -1, -1, -1, 372, -1, 374, -1, + 376, -1, 378, 379, 380, -1, -1, -1, -1, -1, + -1, -1, 388, 389, -1, -1, -1, 393, 394, -1, + -1, -1, -1, -1, 256, -1, 402, 403, 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, 414, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, 430, -1, -1, - -1, -1, -1, -1, -1, 369, -1, 371, -1, 373, - -1, 375, 376, 377, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 391, -1, -1, - -1, 262, -1, -1, -1, 266, -1, -1, 402, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 414, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 430, 298, -1, -1, - -1, -1, -1, -1, 369, -1, 371, -1, 373, -1, - 375, 376, 377, 314, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 402, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 414, - -1, -1, -1, -1, -1, -1, 357, -1, -1, -1, - -1, -1, 363, 364, -1, 430, -1, -1, 369, 370, - -1, 372, -1, 374, -1, 376, 377, -1, 379, 380, - -1, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, -1, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, -1, -1, 256, -1, 419, -1, - 421, -1, -1, 424, 264, 265, 266, 267, 268, 430, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, - 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, 368, -1, - -1, -1, 372, -1, -1, -1, -1, 377, 378, 379, - 380, 381, -1, -1, -1, 385, -1, 387, -1, -1, - -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, 418, 419, - 420, 421, -1, 423, 264, 265, 266, 267, -1, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, - 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, 368, -1, - -1, -1, 372, -1, -1, -1, -1, 377, 378, 379, - 380, 381, -1, -1, -1, 385, -1, 387, -1, -1, + 344, 417, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 433, -1, -1, + -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, + 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, + -1, -1, -1, -1, 388, 389, -1, -1, -1, 393, + 394, -1, -1, -1, -1, -1, 256, -1, 402, 403, + 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 433, + -1, -1, -1, -1, 366, 367, -1, -1, -1, -1, + 372, -1, 374, -1, 376, -1, 378, 379, 380, -1, + -1, -1, -1, -1, -1, -1, 388, 389, -1, -1, + -1, 393, 394, -1, -1, -1, -1, -1, 256, -1, + -1, -1, 404, 405, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 417, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 433, -1, -1, -1, -1, 366, 367, -1, -1, + -1, -1, 372, -1, 374, -1, 376, -1, 378, 379, + 380, -1, -1, -1, -1, -1, -1, -1, 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, + 256, -1, -1, -1, 404, 405, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 417, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 433, -1, -1, -1, -1, 366, 367, + -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, + 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, + -1, 389, -1, -1, -1, 393, 394, -1, -1, -1, + -1, -1, 256, -1, -1, -1, 404, 405, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 433, -1, -1, -1, -1, + 366, 367, -1, -1, -1, -1, 372, -1, 374, -1, + 376, -1, 378, 379, 380, -1, -1, -1, -1, -1, + -1, -1, -1, 389, -1, -1, -1, 393, 394, -1, + -1, -1, -1, -1, 256, -1, -1, -1, 404, 405, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 417, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 433, -1, -1, + -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, + 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, + -1, -1, -1, -1, -1, 389, -1, -1, -1, -1, + 394, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 433, + -1, -1, -1, -1, 366, 367, -1, -1, -1, -1, + 372, -1, 374, -1, 376, -1, 378, 379, 380, -1, + -1, -1, -1, -1, -1, -1, -1, 389, -1, -1, + -1, -1, 394, -1, -1, -1, -1, -1, 256, -1, + -1, -1, 404, 405, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 417, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 433, -1, -1, -1, -1, 366, 367, -1, -1, + -1, -1, 372, -1, 374, -1, 376, -1, 378, 379, + 380, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 262, 394, -1, -1, 266, -1, -1, + -1, -1, -1, -1, 404, 405, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 417, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 298, + -1, -1, -1, 433, -1, -1, -1, -1, 366, 367, + -1, -1, -1, -1, 372, 314, 374, -1, 376, -1, + 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 394, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 404, 405, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 357, 417, + -1, -1, -1, -1, 363, 364, -1, -1, -1, -1, + -1, -1, -1, 372, 373, 433, 375, -1, 377, -1, + 379, 380, -1, 382, 383, -1, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, -1, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, -1, + -1, 256, -1, 422, -1, 424, -1, -1, 427, 264, + 265, 266, 267, 268, 433, 270, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, + 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, + 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, + -1, 316, -1, 318, 319, -1, -1, 322, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, 371, -1, -1, -1, + 375, -1, -1, -1, -1, 380, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, -1, -1, -1, -1, + -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 418, 419, - 420, 421, 264, 265, 266, 267, -1, -1, 270, 271, + -1, -1, -1, -1, 256, -1, 421, 422, 423, 424, + -1, 426, 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, @@ -14021,44 +14511,61 @@ void case_1078() 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, 368, -1, -1, -1, - 372, -1, -1, -1, -1, 377, 378, 379, 380, 381, - -1, -1, -1, 385, -1, 387, -1, -1, -1, -1, - -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, + 362, 363, -1, -1, 366, 367, -1, -1, -1, 371, + -1, -1, -1, 375, -1, -1, -1, -1, 380, 381, + 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, + -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 256, -1, -1, -1, 418, 419, 420, 421, - 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, - 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, - -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, - -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, 368, -1, -1, -1, 372, -1, - -1, -1, -1, 377, 378, 379, 380, 381, -1, -1, - -1, 385, -1, 387, -1, -1, -1, -1, -1, 393, - 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, + 422, 423, 424, 264, 265, 266, 267, -1, -1, 270, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, + 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, + -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + 371, -1, -1, -1, 375, -1, -1, -1, -1, 380, + 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, + -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 418, 419, 420, 421, 264, 265, - 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, - 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, - -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, - -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, - 316, -1, 318, 319, -1, -1, 322, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 421, 422, 423, 424, 264, 265, 266, 267, -1, -1, + 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, + -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, + 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, + -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, + 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, 371, -1, -1, -1, 375, -1, -1, -1, -1, + 380, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, 368, -1, -1, -1, 372, -1, -1, -1, - -1, 377, 378, 379, 380, 381, -1, -1, -1, 385, - -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 421, 422, 423, 424, 264, 265, 266, 267, -1, + -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, + 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, + 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, + 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, + -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, 371, -1, -1, -1, 375, -1, -1, -1, + -1, 380, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 418, 419, 420, 421, 264, 265, -1, 267, + -1, -1, 421, 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, @@ -14068,150 +14575,215 @@ void case_1078() -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, -1, 372, -1, -1, 375, -1, -1, - 378, 379, 380, 381, -1, -1, -1, 385, -1, 387, - -1, -1, 373, -1, -1, 393, 394, -1, -1, -1, - -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - 418, 419, 420, 421, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, 419, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, 368, 369, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, - 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, 418, 419, 420, - 421, 285, -1, 424, 288, -1, -1, -1, 429, -1, - -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, 368, -1, -1, -1, 372, -1, - -1, -1, -1, -1, 378, 379, 380, 381, -1, -1, - -1, 385, -1, 387, -1, -1, -1, -1, -1, 393, - 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, + -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, + 378, -1, 363, 381, 382, 383, 384, -1, -1, -1, + 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, + -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, 421, 422, 423, 424, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, 422, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, + -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, + -1, -1, -1, 371, 372, -1, -1, 375, -1, -1, + -1, -1, -1, 381, 382, 383, 384, -1, -1, -1, + 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, + -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, 421, 422, 423, 424, 285, -1, 427, + 288, -1, -1, -1, 432, -1, -1, 295, -1, -1, + -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, + -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, + -1, -1, -1, 371, -1, -1, -1, 375, -1, -1, + -1, -1, -1, 381, 382, 383, 384, -1, -1, -1, + 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, 418, 419, 420, 421, -1, -1, - 424, 264, 265, -1, 267, 429, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, 265, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 256, 421, 422, 423, 424, -1, -1, 427, + 264, 265, -1, 267, 432, -1, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, + 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, + -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, + 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, + 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, + 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, + 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, 366, 367, -1, -1, -1, 371, 372, -1, + -1, 375, -1, -1, -1, -1, -1, 381, 382, 383, + 384, -1, -1, -1, 388, -1, 390, -1, -1, 376, + -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 256, -1, -1, -1, 421, 422, 423, + 424, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, 422, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, - 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, + 303, 304, 288, 306, -1, -1, -1, -1, -1, 295, + 313, -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, 368, 369, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 371, -1, -1, -1, -1, - 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, + 363, -1, -1, 366, 367, -1, -1, -1, -1, -1, + -1, -1, 375, -1, -1, -1, -1, -1, 381, 382, + 383, 384, -1, -1, -1, 388, -1, 390, 374, -1, + -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, 418, 419, 420, 421, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, 419, 279, -1, -1, 265, -1, 267, - 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, - 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, - 288, 306, -1, -1, -1, -1, -1, 295, 313, -1, - -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, - 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, - 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, -1, -1, -1, -1, -1, 393, 394, + -1, -1, -1, -1, 256, -1, -1, -1, 421, 422, + 423, 424, 264, 265, -1, 267, -1, -1, 270, 271, + -1, -1, -1, 275, 276, 277, 422, 279, -1, -1, + 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, + 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, + 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, 316, 300, 318, 319, 320, 304, + 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, + 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, + -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, + -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, 366, 367, -1, -1, -1, 371, + -1, -1, -1, 375, -1, -1, -1, -1, -1, 381, + 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, + -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, - -1, -1, -1, 418, 419, 420, 421, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, 419, 279, -1, -1, 265, -1, 267, 285, -1, - 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, - -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, - 300, 318, 319, 320, 304, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, - -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, - 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, 368, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, + 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, 422, 279, -1, + -1, -1, -1, -1, 285, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + 371, -1, -1, -1, 375, -1, -1, -1, -1, -1, + 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, + -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, 419, - 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + 421, 422, 423, 424, 262, -1, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, -1, -1, -1, -1, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + 298, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, + -1, -1, -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, - -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, + -1, -1, -1, -1, -1, -1, -1, 375, -1, 377, + -1, -1, -1, 381, 382, 383, 384, 385, -1, -1, + 388, -1, 390, 256, -1, -1, -1, -1, 396, 397, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 421, 422, 288, 424, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, + -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, 366, 367, -1, -1, -1, -1, 372, + -1, -1, 375, -1, -1, -1, -1, -1, 381, 382, + 383, 384, -1, -1, -1, 388, -1, 390, -1, -1, + -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, 418, - 419, 420, 421, 262, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, 298, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, -1, -1, 343, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, -1, -1, 421, 422, + 423, 424, 264, 265, -1, 267, -1, -1, 270, 271, + -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, + 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, + 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, + 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, + 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, + 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, + -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, + -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, 366, 367, -1, -1, -1, -1, + 372, -1, -1, 375, -1, -1, -1, -1, -1, 381, + 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, + -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, + 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, 422, 279, -1, + -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, + -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, + -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, + -1, 295, -1, -1, -1, 316, 300, 318, 319, -1, + 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, + 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, + 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, + -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, 374, -1, -1, -1, 378, - 379, 380, 381, 382, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 421, 422, 423, 424, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, 422, 279, + -1, -1, -1, -1, -1, 285, -1, -1, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + -1, 421, 422, 423, 424, 262, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + 277, -1, 279, -1, -1, -1, -1, -1, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, 298, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, - -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, 369, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, + -1, -1, -1, -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, - -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, - -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, - -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, - 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, - 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, - -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - 369, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, - -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, 366, + 367, -1, -1, -1, -1, -1, -1, -1, 375, -1, + 377, -1, -1, -1, 381, 382, 383, 384, -1, -1, + -1, 388, -1, 390, 256, -1, -1, -1, -1, 396, + 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, + -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, + -1, -1, -1, 285, 421, 422, 288, 424, -1, -1, + -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, + 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, + 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, + 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, + -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, 366, 367, -1, -1, -1, -1, + -1, -1, -1, 375, -1, -1, -1, -1, -1, 381, + 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, + -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 418, - 419, 420, 421, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, 419, 279, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, + 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, @@ -14220,150 +14792,172 @@ void case_1078() 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, 418, 419, 420, - 421, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, 419, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, - -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, - 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, 418, 419, 420, 421, 262, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, 298, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, 374, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, - 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, + 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, + -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, 418, 419, 420, - 421, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, 265, - -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, - -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, - 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, - -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, - -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, - 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, 418, 419, 420, 421, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, 419, 279, -1, -1, 265, -1, 267, - 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, - 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, - 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, - 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, -1, -1, -1, -1, -1, 393, 394, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, - -1, -1, -1, 418, 419, 420, 421, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, 419, 279, -1, -1, 265, -1, 267, 285, -1, - 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, - -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, - 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, - -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, - 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 421, 422, 423, 424, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, 422, 279, + -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, + -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, + 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, + -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, + -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, + -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, 419, - 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, 421, 422, 423, 424, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, 422, + 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, + -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, + -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, + -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, + 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, + 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, + -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, - -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + -1, -1, 421, 422, 423, 424, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + 422, 279, -1, -1, -1, -1, -1, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, + -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, 418, - 419, 420, 421, 262, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, 298, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, + -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, + -1, -1, -1, 381, 382, 383, 384, -1, -1, -1, + 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, + -1, -1, -1, -1, 285, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 298, -1, -1, + -1, 256, -1, 421, 422, 423, 424, 262, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, 327, -1, -1, -1, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, 298, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + 381, 382, 383, 384, -1, 386, 387, 388, 389, 390, + 391, 392, 393, -1, -1, 396, 397, 398, 399, 400, + 401, 402, 403, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, 377, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, + -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, + -1, -1, 336, -1, 338, 375, -1, 377, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, + 265, -1, 267, -1, -1, 270, 271, -1, 372, 373, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, 261, -1, 263, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, 374, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, 297, 334, + -1, -1, -1, 302, -1, -1, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, + -1, -1, 321, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, 333, -1, -1, 336, -1, 338, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, + 270, 271, -1, 372, 373, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, + -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, + -1, -1, 336, -1, 338, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, + 265, -1, 267, -1, -1, 270, 271, -1, 372, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, 261, -1, 263, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, 297, 334, + -1, -1, -1, 302, -1, -1, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, + -1, -1, 321, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, 333, -1, -1, 336, -1, 338, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, + 270, 271, -1, 372, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, 261, -1, 263, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, + -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, + -1, -1, 336, -1, 338, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, 261, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, 374, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, 297, 334, + -1, -1, 301, 302, -1, -1, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, + -1, -1, 321, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, 333, -1, -1, 336, -1, 338, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, + -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, -1, -1, 317, -1, -1, -1, 321, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, + -1, -1, 336, -1, 338, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -14371,65 +14965,53 @@ void case_1078() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, - 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, - -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, - 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -14437,65 +15019,53 @@ void case_1078() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, - 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, - -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, - 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -14503,65 +15073,53 @@ void case_1078() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, - 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, - -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, - 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -14569,65 +15127,53 @@ void case_1078() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, - 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, - -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, - 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -14635,65 +15181,53 @@ void case_1078() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, - 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, - -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, - 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, - -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, - 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, + 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -14701,159 +15235,166 @@ void case_1078() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, - 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, -1, 261, -1, - -1, -1, 265, -1, 267, 418, 419, 270, 421, 272, - 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, - 283, 284, -1, -1, 287, 288, -1, -1, -1, -1, - 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, - -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, - 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, - 333, 334, 256, 336, 337, 338, -1, -1, -1, 342, - 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, -1, -1, 362, - -1, 285, -1, -1, 288, 368, 369, 370, -1, -1, - -1, 295, -1, -1, -1, 378, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, 337, -1, -1, 419, -1, -1, -1, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, + -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, + -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, 337, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, 256, -1, -1, -1, -1, 372, -1, - 262, 264, 265, -1, 267, 379, 380, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, 261, - -1, 263, 295, -1, -1, -1, 298, 300, -1, 302, - 303, 304, -1, -1, 418, 419, -1, -1, -1, -1, - -1, -1, 284, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, 297, 329, 330, 331, 332, - 302, 334, -1, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, 315, -1, 317, -1, -1, -1, 321, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, 333, 364, -1, 336, -1, 338, -1, -1, 372, - 372, 373, 374, 375, 376, -1, -1, 379, 380, -1, - -1, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 362, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, -1, -1, 418, 419, -1, -1, 421, - -1, 261, 424, 263, -1, 265, -1, 267, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, + -1, -1, 382, 383, -1, -1, 256, -1, -1, -1, + 390, 261, -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, - -1, -1, -1, 293, 294, 295, 296, 297, -1, -1, - 300, -1, 302, -1, 304, -1, 306, 307, -1, 309, - 310, 311, 312, -1, -1, 315, 316, 317, 318, -1, - -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, - -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 362, -1, -1, 365, 366, 261, -1, -1, - -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, - -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, - 284, -1, -1, 287, 288, -1, -1, -1, -1, 293, - -1, 295, 296, 297, -1, -1, 300, -1, 302, -1, - 304, -1, -1, 307, -1, 309, 310, 311, 312, 419, - -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, - -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, - 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, - -1, 261, -1, -1, -1, 265, -1, 267, -1, -1, - 270, -1, 272, 273, -1, 275, -1, 277, 362, 279, - -1, 281, 282, 283, 284, 369, -1, 287, 288, -1, - -1, -1, -1, 293, 378, 295, 296, 297, -1, -1, + -1, 421, 422, 293, 424, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 333, 334, 419, 336, 337, 338, -1, - -1, -1, 342, -1, -1, 261, -1, -1, -1, 265, + 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, + -1, -1, 342, -1, -1, 256, -1, -1, -1, -1, + -1, -1, 262, 264, 265, -1, 267, -1, -1, 270, + 271, -1, 362, -1, 275, 276, 277, -1, 279, -1, + -1, 371, 372, 373, 285, -1, -1, 288, -1, -1, + -1, 381, -1, -1, 295, -1, -1, -1, 298, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, 422, 334, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, 364, 366, 367, -1, -1, -1, + -1, -1, -1, -1, 375, 375, 376, 377, 378, 379, + -1, -1, 382, 383, -1, -1, 386, 387, 388, 389, + 390, 391, 392, 393, 394, -1, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, -1, -1, + 421, 422, -1, -1, 424, -1, 261, 427, 263, -1, + 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, + 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, + -1, -1, 287, 288, -1, -1, -1, -1, 293, 294, + 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, + -1, 306, 307, -1, 309, 310, 311, 312, -1, -1, + 315, 316, 317, 318, -1, -1, 321, 322, 323, -1, + -1, -1, -1, -1, -1, 330, 331, -1, 333, 334, + -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 362, -1, -1, + -1, -1, -1, 368, 369, 261, -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, 275, - -1, 277, 362, 279, -1, 281, 282, 283, 284, 369, - -1, 287, 288, -1, -1, -1, -1, 293, 378, 295, + -1, 277, -1, 279, -1, 281, 282, 283, 284, -1, + -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 307, -1, 309, 310, 311, 312, 422, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, - -1, -1, -1, -1, 330, 331, -1, 333, 334, 419, - 336, 337, 338, -1, -1, -1, 342, -1, -1, 261, + -1, -1, -1, -1, 330, 331, -1, 333, 334, -1, + 336, 337, 338, -1, -1, -1, 342, 261, -1, -1, + -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, + -1, 275, -1, 277, -1, 279, 362, 281, 282, 283, + 284, -1, -1, 287, 288, -1, 372, -1, -1, 293, + -1, 295, 296, 297, -1, 381, 300, -1, 302, -1, + 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, + -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, + 334, -1, 336, 337, 338, -1, 422, -1, 342, 261, -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, - 272, 273, -1, 275, -1, 277, 362, 279, -1, 281, - 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, - -1, 293, 378, 295, 296, 297, -1, -1, 300, -1, + 272, 273, -1, 275, -1, 277, -1, 279, 362, 281, + 282, 283, 284, -1, -1, 287, 288, -1, 372, -1, + -1, 293, -1, 295, 296, 297, -1, 381, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, - -1, 333, 334, 419, 336, 337, 338, -1, -1, -1, - 342, -1, -1, 261, -1, -1, -1, 265, -1, 267, + -1, 333, 334, -1, 336, 337, 338, -1, 422, -1, + 342, 261, -1, -1, -1, 265, -1, 267, -1, -1, + 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, + 362, 281, 282, 283, 284, -1, -1, 287, 288, -1, + -1, -1, -1, 293, -1, 295, 296, 297, -1, 381, + 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, + -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, + 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, + 422, -1, 342, 261, -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, - 362, 279, -1, 281, 282, 283, 284, 369, -1, 287, - 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, + -1, 279, 362, 281, 282, 283, 284, -1, -1, 287, + 288, -1, 372, -1, -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, 261, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, 284, -1, - -1, -1, 330, 331, -1, 333, 334, 419, 336, 337, - 338, 297, -1, -1, 342, -1, 302, -1, -1, 305, + -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, + 338, 297, 422, 261, 342, -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, 362, 321, -1, -1, -1, 325, - -1, 369, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, 357, -1, -1, -1, 285, 362, -1, 288, -1, - -1, -1, -1, 369, 370, 295, 372, -1, 374, -1, - 300, 419, 302, 303, 304, -1, 306, -1, -1, -1, - -1, 387, -1, 313, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, - -1, 341, -1, 419, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, - -1, -1, 372, 373, -1, 375, -1, -1, 378, 379, - 380, 381, -1, -1, -1, 385, -1, 387, -1, -1, - -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, - -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, 418, 419, - 420, 421, 285, -1, -1, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, 306, -1, -1, -1, -1, -1, -1, - 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, - -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, - -1, -1, 375, -1, -1, 378, 379, 380, 381, -1, - -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, - 393, 394, -1, -1, -1, -1, -1, -1, 264, 265, - -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, - 276, 277, -1, 279, -1, 418, 419, 420, 421, 285, - -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, + -1, 317, -1, -1, 362, 321, 284, -1, -1, 325, + -1, -1, -1, -1, 372, -1, -1, 333, -1, 297, + 336, -1, 338, -1, 302, -1, -1, -1, -1, 307, + -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, + -1, 357, -1, 321, -1, -1, 362, 325, -1, -1, + -1, -1, -1, -1, -1, 333, 372, 373, 336, 375, + 338, 377, -1, -1, 422, 264, 265, -1, 267, -1, + -1, 270, 271, -1, 390, -1, 275, 276, 277, -1, + 279, -1, -1, -1, 362, -1, 285, -1, -1, 288, + -1, -1, -1, -1, 372, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, 422, 306, -1, -1, + -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, 422, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, 376, -1, 378, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, 306, -1, -1, + -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, 378, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, 337, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, - -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, - -1, 337, -1, -1, -1, 341, -1, -1, 344, 345, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, 337, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, -1, 372, -1, -1, -1, - -1, -1, 378, 379, 380, 381, -1, -1, -1, 385, - -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 418, 419, 420, 421, 285, -1, -1, 288, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, @@ -14861,233 +15402,242 @@ void case_1078() 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, - -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, - 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, - -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, - -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, - -1, -1, -1, 275, 276, 277, -1, 279, -1, 418, - 419, 420, 421, 285, -1, -1, 288, -1, -1, -1, - -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, - -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, 368, -1, -1, -1, - 372, -1, -1, -1, -1, -1, 378, 379, 380, 381, - -1, -1, -1, 385, -1, 387, -1, -1, -1, -1, - -1, 393, 394, -1, -1, -1, -1, -1, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, 418, 419, 420, 421, - 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, 371, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, 371, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, - 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, - -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, - 385, -1, 387, -1, -1, -1, -1, -1, 393, 394, - -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, 418, 419, 420, 421, 285, -1, -1, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, -1, 372, -1, -1, -1, -1, -1, - 378, 379, 380, 381, -1, -1, -1, 385, -1, 387, - -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, - -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, + 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, + -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, + -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, + -1, 390, -1, 264, 265, -1, 267, 396, 397, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - 418, 419, 420, 421, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, -1, -1, -1, 285, -1, -1, 288, -1, -1, + -1, -1, 421, 422, 295, 424, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, - 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, - 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, 418, 419, 420, - 421, 285, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, 372, -1, - -1, -1, -1, -1, 378, 379, 380, 381, -1, -1, - -1, 385, -1, 387, -1, -1, -1, -1, -1, 393, - 394, -1, -1, -1, -1, -1, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, 418, 419, 420, 421, 285, -1, - -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, - -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, - 387, -1, 264, 265, -1, 267, 393, 394, 270, 271, - -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, - -1, -1, -1, 285, -1, -1, 288, -1, -1, -1, - -1, 418, 419, 295, 421, -1, -1, -1, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - 372, -1, -1, -1, -1, -1, 378, 379, 380, 381, - -1, -1, -1, 385, -1, 387, -1, -1, -1, -1, - -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, + -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, + 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, + -1, 264, 265, -1, 267, 396, 397, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, + 421, 422, 295, 424, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, 337, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 263, -1, 265, -1, 267, 418, 419, 270, 421, - 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, - 282, 283, -1, -1, -1, 287, 288, -1, -1, -1, - -1, 293, -1, 295, 296, -1, -1, -1, 300, -1, - -1, -1, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 315, 316, -1, 318, -1, -1, -1, - 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, - 264, 265, 334, 267, -1, 337, 270, 271, -1, -1, - 342, 275, 276, 277, -1, 279, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, 366, 367, -1, -1, -1, -1, -1, + 264, 265, 375, 267, -1, -1, 270, 271, -1, 382, + 383, 275, 276, 277, -1, 279, -1, 390, -1, -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, -1, 365, 366, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, 378, -1, -1, -1, + -1, 295, -1, 261, -1, -1, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, 421, 422, + -1, 424, 316, -1, 318, 319, 284, -1, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, 297, + 334, -1, -1, 337, 302, -1, -1, -1, -1, 307, + -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, + -1, -1, -1, 321, -1, 359, 360, 361, 362, 363, + -1, -1, 366, 367, -1, 333, -1, -1, 336, -1, + 338, 375, -1, 263, -1, 265, -1, 267, 382, 383, + 270, -1, 272, 273, -1, 275, 390, 277, -1, 279, + -1, 281, 282, 283, 362, -1, -1, 287, 288, -1, + 368, 369, -1, 293, 372, 295, 296, -1, -1, -1, + 300, -1, -1, -1, 304, -1, -1, 421, 422, -1, + 424, -1, -1, -1, -1, 315, 316, -1, 318, -1, + -1, -1, 322, 323, -1, -1, -1, -1, -1, -1, + 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, + 264, 265, 342, 267, -1, -1, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, + -1, 285, -1, -1, 288, -1, -1, -1, 368, 369, + -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, + 304, 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, 337, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 419, -1, -1, + -1, -1, 422, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, 265, -1, 267, 372, -1, - 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, - -1, 281, 282, 283, -1, -1, -1, 287, 288, -1, - -1, -1, -1, 293, -1, 295, 296, -1, -1, -1, - 300, -1, -1, -1, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 418, 419, 316, -1, 318, -1, - -1, -1, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 265, 334, 267, -1, 337, 270, -1, - -1, 273, 342, 275, -1, 277, -1, 279, -1, 281, - 282, 283, -1, -1, -1, 287, 288, -1, -1, -1, - -1, 293, -1, 295, -1, 265, -1, 267, 300, -1, - 270, -1, 304, -1, -1, 275, -1, -1, 378, 279, - -1, -1, -1, -1, 316, -1, 318, -1, 288, -1, - 322, -1, -1, -1, -1, 295, -1, -1, 330, 331, - 300, -1, 334, -1, 304, 337, 306, -1, 308, -1, - 342, -1, -1, 313, -1, -1, 316, -1, 318, 419, - -1, -1, 322, -1, -1, 325, -1, -1, -1, -1, - 330, 331, -1, 265, 334, 267, -1, 337, 270, -1, - -1, -1, -1, 275, -1, -1, 378, 279, -1, -1, + -1, -1, 366, 367, -1, -1, -1, -1, 265, -1, + 267, 375, -1, 270, -1, 272, 273, -1, 275, -1, + 277, -1, 279, -1, 281, 282, 283, -1, -1, -1, + 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, + -1, -1, -1, 300, -1, -1, -1, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 421, 422, 316, + -1, 318, -1, -1, -1, 322, 323, -1, -1, -1, + -1, -1, -1, 330, 331, -1, 265, 334, 267, -1, + 337, 270, -1, 272, 273, 342, 275, -1, 277, -1, + 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, + -1, -1, -1, -1, 293, -1, 295, 296, -1, -1, + -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, + -1, -1, -1, -1, 381, -1, -1, 316, -1, 318, + -1, -1, -1, 322, 323, -1, -1, -1, -1, -1, + -1, 330, 331, -1, 265, 334, 267, -1, 337, 270, + -1, -1, 273, 342, 275, -1, 277, -1, 279, -1, + 281, 282, 283, -1, -1, 422, 287, 288, -1, -1, + -1, -1, 293, -1, 295, -1, -1, -1, -1, 300, + -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, -1, -1, + -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, + 331, -1, 265, 334, 267, -1, 337, 270, -1, -1, + 273, 342, 275, -1, 277, -1, 279, -1, 281, 282, + 283, -1, -1, 422, 287, 288, -1, -1, -1, -1, + 293, -1, 295, -1, -1, -1, -1, 300, -1, -1, + -1, 304, 265, -1, 267, -1, -1, 270, -1, -1, + 381, -1, 275, 316, -1, 318, 279, -1, -1, 322, + -1, -1, -1, -1, -1, 288, -1, 330, 331, -1, + -1, 334, 295, -1, 337, -1, -1, 300, -1, 342, + -1, 304, 265, 306, 267, 308, -1, 270, -1, -1, + 313, 422, 275, 316, -1, 318, 279, -1, -1, 322, + -1, -1, 325, -1, -1, 288, -1, 330, 331, -1, + -1, 334, 295, -1, 337, -1, -1, 300, -1, -1, + -1, 304, -1, 306, -1, 308, -1, -1, -1, -1, + 313, -1, -1, 316, -1, 318, -1, -1, -1, 322, + -1, -1, 325, -1, -1, -1, -1, 330, 331, -1, + -1, 334, -1, 376, 337, 265, -1, 267, -1, 422, + 270, -1, -1, -1, -1, 275, -1, -1, -1, 279, + -1, -1, -1, -1, -1, -1, -1, -1, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, 374, -1, -1, 304, 265, 306, 267, -1, 422, + 270, -1, -1, 313, -1, 275, 316, -1, 318, 279, + -1, -1, 322, -1, -1, 325, -1, -1, 288, -1, + 330, 331, -1, -1, 334, 295, -1, 337, -1, -1, + 300, -1, -1, -1, 304, 265, 306, 267, 308, 422, + 270, -1, -1, 313, -1, 275, 316, -1, 318, 279, + -1, -1, 322, 363, -1, 325, -1, -1, 288, -1, + 330, 331, -1, -1, 334, 295, -1, 337, -1, -1, + 300, -1, -1, -1, 304, 265, 306, 267, 308, -1, + 270, -1, -1, 313, -1, 275, 316, -1, 318, 279, + -1, -1, 322, 283, -1, 325, -1, -1, 288, -1, + 330, 331, -1, 293, 334, 295, -1, 337, -1, -1, + 300, -1, 422, -1, 304, 305, -1, -1, -1, 265, + -1, 267, -1, -1, 270, -1, 316, -1, 318, 275, + -1, -1, 322, 279, -1, -1, -1, -1, -1, -1, + 330, 331, 288, 265, 334, 267, -1, 337, 270, 295, + 272, -1, 422, 275, 300, -1, -1, 279, 304, -1, -1, -1, -1, -1, -1, -1, 288, -1, -1, -1, - -1, -1, -1, 295, -1, 265, -1, 267, 300, -1, - 270, -1, 304, 373, 306, 275, 308, -1, -1, 279, - -1, 313, -1, -1, 316, -1, 318, 419, 288, -1, - 322, -1, -1, 325, -1, 295, -1, -1, 330, 331, - 300, -1, 334, -1, 304, 337, 306, -1, -1, -1, - -1, -1, -1, 313, -1, -1, 316, -1, 318, 419, - -1, -1, 322, -1, -1, 325, -1, -1, -1, -1, - 330, 331, -1, -1, 334, -1, -1, 337, 265, 371, - 267, -1, -1, 270, -1, -1, -1, -1, 275, -1, - -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, - -1, 288, -1, 363, -1, -1, -1, -1, 295, -1, - 265, -1, 267, 300, -1, 270, -1, 304, -1, 306, - 275, 308, -1, -1, 279, -1, 313, 419, -1, 316, - -1, 318, -1, 288, -1, 322, -1, -1, 325, -1, - 295, -1, -1, 330, 331, 300, -1, 334, -1, 304, - 337, 306, -1, 308, -1, 265, -1, 267, 313, 419, - 270, 316, -1, 318, -1, 275, -1, 322, -1, 279, - 325, -1, -1, 283, -1, 330, 331, -1, 288, 334, - -1, -1, 337, 293, -1, 295, -1, 265, -1, 267, - 300, -1, 270, -1, 304, 305, -1, 275, -1, -1, - -1, 279, -1, -1, -1, -1, 316, -1, 318, -1, - 288, -1, 322, -1, -1, -1, -1, 295, -1, -1, - 330, 331, 300, -1, 334, -1, 304, 337, -1, -1, - -1, 261, 419, -1, -1, -1, -1, -1, 316, -1, - 318, -1, 272, -1, 322, -1, -1, 277, -1, -1, - -1, 281, 330, 331, 284, -1, 334, -1, -1, 337, - -1, -1, -1, -1, 419, -1, 296, 297, -1, -1, - -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, 363, -1, 317, -1, -1, - -1, 321, -1, 323, -1, -1, -1, -1, -1, -1, - -1, -1, 261, 333, -1, 335, 336, -1, 338, 419, - -1, -1, 342, 272, -1, -1, -1, -1, 277, -1, - -1, -1, 281, -1, -1, 284, -1, -1, -1, -1, - -1, -1, 362, -1, -1, -1, -1, 296, 297, 369, - 370, 419, 301, 302, 261, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, 323, -1, -1, 284, -1, -1, - -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, - 297, -1, 261, 342, 263, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, 315, -1, - 317, -1, -1, 362, 321, 284, -1, -1, -1, -1, - 369, 370, -1, -1, -1, -1, 333, -1, 297, 336, - -1, 338, -1, 302, -1, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, -1, 362, -1, -1, -1, -1, - -1, -1, 369, 370, 333, -1, -1, 336, 261, 338, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, - -1, -1, -1, -1, 277, -1, -1, -1, 281, -1, - -1, 284, -1, 362, -1, -1, -1, -1, -1, -1, - 369, 370, -1, 296, 297, -1, -1, -1, 301, 302, - -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 272, -1, 317, -1, -1, 277, 321, -1, - 323, 281, -1, -1, 284, -1, -1, -1, -1, -1, - 333, -1, -1, 336, -1, 338, 296, 297, -1, 342, - -1, 301, 302, -1, 261, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, 362, - -1, 321, -1, 323, -1, -1, 369, 284, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, - 297, -1, 342, -1, 261, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, 362, -1, 321, -1, -1, 284, -1, 369, - -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, - 297, 338, -1, -1, 261, 302, -1, -1, -1, -1, + 316, -1, 318, 295, -1, -1, 322, -1, 300, -1, + 302, -1, 304, -1, 330, 331, -1, 261, 334, -1, + -1, 337, 422, -1, 316, -1, 318, -1, 272, -1, + 322, 323, -1, 277, -1, -1, -1, 281, 330, 331, + 284, -1, 334, -1, -1, 337, -1, -1, -1, -1, + -1, -1, 296, 297, -1, -1, -1, 301, 302, -1, + -1, -1, 422, 307, 261, 309, 310, 311, 312, -1, + -1, -1, -1, 317, -1, 272, -1, 321, -1, 323, + 277, -1, -1, -1, 281, -1, -1, 284, -1, 333, + -1, 335, 336, -1, 338, -1, -1, -1, 342, 296, + 297, -1, -1, -1, 301, 302, 422, -1, -1, -1, + 307, 261, 309, 310, 311, 312, -1, -1, 362, -1, + 317, -1, 272, -1, 321, -1, 323, 277, 372, 373, + 422, 281, -1, -1, 284, -1, 333, -1, -1, 336, + -1, 338, -1, -1, -1, 342, 296, 297, -1, -1, + -1, 301, 302, -1, -1, -1, -1, 307, 261, 309, + 310, 311, 312, -1, -1, 362, -1, 317, -1, 272, + -1, 321, -1, 323, 277, 372, 373, -1, 281, -1, + -1, 284, -1, 333, -1, -1, 336, -1, 338, -1, + -1, -1, 342, 296, 297, -1, 261, -1, 301, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, 362, -1, 317, -1, -1, -1, 321, 284, + 323, -1, 372, -1, -1, -1, -1, -1, -1, -1, + 333, -1, 297, 336, 261, 338, -1, 302, -1, 342, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, -1, 321, 284, -1, 362, + -1, -1, -1, -1, -1, -1, -1, -1, 333, 372, + 297, 336, -1, 338, -1, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, 362, -1, 284, 365, 366, - -1, -1, 369, -1, -1, -1, 333, -1, -1, 336, - 297, 338, -1, -1, 261, 302, 263, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, 315, -1, - 317, -1, -1, -1, 321, 362, -1, 284, 365, 366, - -1, -1, 369, -1, 261, -1, 333, -1, -1, 336, - 297, 338, -1, -1, -1, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, 284, -1, -1, - 317, -1, -1, -1, 321, 362, -1, -1, -1, -1, - 297, -1, 369, -1, 261, 302, 333, -1, -1, 336, - 307, 338, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, -1, -1, 284, -1, -1, - -1, -1, -1, -1, 261, 362, 333, -1, -1, 336, - 297, 338, 369, -1, 301, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, 284, -1, -1, - 317, -1, -1, -1, 321, 362, -1, -1, 365, 366, - 297, -1, -1, -1, -1, 302, 333, -1, -1, 336, - 307, 338, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 362, 333, -1, -1, 336, + 317, -1, -1, -1, 321, -1, -1, 362, -1, -1, + -1, -1, -1, 368, 369, -1, 333, 372, -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 362, + -1, -1, -1, -1, -1, 362, -1, -1, -1, -1, + -1, 368, 369, }; -#line 7338 "cs-parser.jay" +#line 7571 "cs-parser.jay" // <summary> // A class used to hold info about an operator declarator @@ -15850,7 +16400,13 @@ static string GetTokenName (int token) return ";"; case Token.TILDE: return "~"; - + case Token.WHEN: + return "when"; + case Token.INTERPOLATED_STRING_END: + return "}"; + case Token.INTERPOLATED_STRING: + return "${"; + case Token.PLUS: case Token.UMINUS: case Token.MINUS: @@ -15885,6 +16441,7 @@ static string GetTokenName (int token) case Token.OP_AND_ASSIGN: case Token.OP_XOR_ASSIGN: case Token.OP_OR_ASSIGN: + case Token.INTERR_OPERATOR: return "<operator>"; case Token.BOOL: @@ -16131,73 +16688,76 @@ namespace yydebug { public const int ASYNC = 362; public const int AWAIT = 363; public const int INTERR_OPERATOR = 364; - public const int GET = 365; - public const int SET = 366; - public const int LAST_KEYWORD = 367; - public const int OPEN_BRACE = 368; - public const int CLOSE_BRACE = 369; - public const int OPEN_BRACKET = 370; - public const int CLOSE_BRACKET = 371; - public const int OPEN_PARENS = 372; - public const int CLOSE_PARENS = 373; - public const int DOT = 374; - public const int COMMA = 375; - public const int COLON = 376; - public const int SEMICOLON = 377; - public const int TILDE = 378; - public const int PLUS = 379; - public const int MINUS = 380; - public const int BANG = 381; - public const int ASSIGN = 382; - public const int OP_LT = 383; - public const int OP_GT = 384; - public const int BITWISE_AND = 385; - public const int BITWISE_OR = 386; - public const int STAR = 387; - public const int PERCENT = 388; - public const int DIV = 389; - public const int CARRET = 390; - public const int INTERR = 391; - public const int DOUBLE_COLON = 392; - public const int OP_INC = 393; - public const int OP_DEC = 394; - public const int OP_SHIFT_LEFT = 395; - public const int OP_SHIFT_RIGHT = 396; - public const int OP_LE = 397; - public const int OP_GE = 398; - public const int OP_EQ = 399; - public const int OP_NE = 400; - public const int OP_AND = 401; - public const int OP_OR = 402; - public const int OP_MULT_ASSIGN = 403; - public const int OP_DIV_ASSIGN = 404; - public const int OP_MOD_ASSIGN = 405; - public const int OP_ADD_ASSIGN = 406; - public const int OP_SUB_ASSIGN = 407; - public const int OP_SHIFT_LEFT_ASSIGN = 408; - public const int OP_SHIFT_RIGHT_ASSIGN = 409; - public const int OP_AND_ASSIGN = 410; - public const int OP_XOR_ASSIGN = 411; - public const int OP_OR_ASSIGN = 412; - public const int OP_PTR = 413; - public const int OP_COALESCING = 414; - public const int OP_GENERICS_LT = 415; - public const int OP_GENERICS_LT_DECL = 416; - public const int OP_GENERICS_GT = 417; - public const int LITERAL = 418; - public const int IDENTIFIER = 419; - public const int OPEN_PARENS_LAMBDA = 420; - public const int OPEN_PARENS_CAST = 421; - public const int GENERIC_DIMENSION = 422; - public const int DEFAULT_COLON = 423; - public const int OPEN_BRACKET_EXPR = 424; - public const int EVAL_STATEMENT_PARSER = 425; - public const int EVAL_COMPILATION_UNIT_PARSER = 426; - public const int EVAL_USING_DECLARATIONS_UNIT_PARSER = 427; - public const int DOC_SEE = 428; - public const int GENERATE_COMPLETION = 429; - public const int COMPLETE_COMPLETION = 430; - public const int UMINUS = 431; + public const int WHEN = 365; + public const int INTERPOLATED_STRING = 366; + public const int INTERPOLATED_STRING_END = 367; + public const int GET = 368; + public const int SET = 369; + public const int LAST_KEYWORD = 370; + public const int OPEN_BRACE = 371; + public const int CLOSE_BRACE = 372; + public const int OPEN_BRACKET = 373; + public const int CLOSE_BRACKET = 374; + public const int OPEN_PARENS = 375; + public const int CLOSE_PARENS = 376; + public const int DOT = 377; + public const int COMMA = 378; + public const int COLON = 379; + public const int SEMICOLON = 380; + public const int TILDE = 381; + public const int PLUS = 382; + public const int MINUS = 383; + public const int BANG = 384; + public const int ASSIGN = 385; + public const int OP_LT = 386; + public const int OP_GT = 387; + public const int BITWISE_AND = 388; + public const int BITWISE_OR = 389; + public const int STAR = 390; + public const int PERCENT = 391; + public const int DIV = 392; + public const int CARRET = 393; + public const int INTERR = 394; + public const int DOUBLE_COLON = 395; + public const int OP_INC = 396; + public const int OP_DEC = 397; + public const int OP_SHIFT_LEFT = 398; + public const int OP_SHIFT_RIGHT = 399; + public const int OP_LE = 400; + public const int OP_GE = 401; + public const int OP_EQ = 402; + public const int OP_NE = 403; + public const int OP_AND = 404; + public const int OP_OR = 405; + public const int OP_MULT_ASSIGN = 406; + public const int OP_DIV_ASSIGN = 407; + public const int OP_MOD_ASSIGN = 408; + public const int OP_ADD_ASSIGN = 409; + public const int OP_SUB_ASSIGN = 410; + public const int OP_SHIFT_LEFT_ASSIGN = 411; + public const int OP_SHIFT_RIGHT_ASSIGN = 412; + public const int OP_AND_ASSIGN = 413; + public const int OP_XOR_ASSIGN = 414; + public const int OP_OR_ASSIGN = 415; + public const int OP_PTR = 416; + public const int OP_COALESCING = 417; + public const int OP_GENERICS_LT = 418; + public const int OP_GENERICS_LT_DECL = 419; + public const int OP_GENERICS_GT = 420; + public const int LITERAL = 421; + public const int IDENTIFIER = 422; + public const int OPEN_PARENS_LAMBDA = 423; + public const int OPEN_PARENS_CAST = 424; + public const int GENERIC_DIMENSION = 425; + public const int DEFAULT_COLON = 426; + public const int OPEN_BRACKET_EXPR = 427; + public const int EVAL_STATEMENT_PARSER = 428; + public const int EVAL_COMPILATION_UNIT_PARSER = 429; + public const int EVAL_USING_DECLARATIONS_UNIT_PARSER = 430; + public const int DOC_SEE = 431; + public const int GENERATE_COMPLETION = 432; + public const int COMPLETE_COMPLETION = 433; + public const int UMINUS = 434; public const int yyErrorCode = 256; } namespace yyParser { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index 25df449f..e6eb1b07 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -266,6 +266,9 @@ namespace Mono.CSharp %token ASYNC %token AWAIT %token INTERR_OPERATOR +%token WHEN +%token INTERPOLATED_STRING +%token INTERPOLATED_STRING_END /* C# keywords which are not really keywords */ %token GET @@ -468,24 +471,38 @@ using_directive ; using_namespace - : USING namespace_or_type_expr SEMICOLON + : USING opt_static namespace_or_type_expr SEMICOLON { - var un = new UsingNamespace ((ATypeNameExpression) $2, GetLocation ($1)); - current_namespace.AddUsing (un); - - lbag.AddLocation (un, GetLocation ($3)); + UsingClause uc; + if ($2 != null) { + if (lang_version <= LanguageVersion.V_5) + FeatureIsNotAvailable (GetLocation ($2), "using static"); + + uc = new UsingType ((ATypeNameExpression) $3, GetLocation ($1)); + lbag.AddLocation (uc, GetLocation ($2), GetLocation ($4)); + } else { + uc = new UsingNamespace ((ATypeNameExpression) $3, GetLocation ($1)); + lbag.AddLocation (uc, GetLocation ($4)); + } + + current_namespace.AddUsing (uc); } - | USING IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON + | USING opt_static IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON { - var lt = (LocatedToken) $2; + var lt = (LocatedToken) $3; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { report.Warning (440, 2, lt.Location, "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); } - var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) $4, GetLocation ($1)); + if ($2 != null) { + report.Error (8085, GetLocation ($2), "A `using static' directive cannot be used to declare an alias"); + } + + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) $5, GetLocation ($1)); current_namespace.AddUsing (un); - lbag.AddLocation (un, GetLocation ($3), GetLocation ($5)); + + lbag.AddLocation (un, GetLocation ($4), GetLocation ($6)); } | USING error { @@ -494,6 +511,11 @@ using_namespace } ; +opt_static + : + | STATIC + ; + // // Strictly speaking, namespaces don't have attributes but // we parse global attributes along with namespace declarations and then @@ -748,7 +770,9 @@ attribute_section_cont } | error { - CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation ($1)); + if (CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation ($1)).Length > 0) + Error_SyntaxError (yyToken); + $$ = null; } ; @@ -893,7 +917,7 @@ named_attribute_argument ; named_argument - : identifier_inside_body COLON opt_named_modifier expression_or_error + : identifier_inside_body COLON opt_named_modifier named_argument_expr { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (GetLocation ($1), "named argument"); @@ -906,6 +930,11 @@ named_argument lbag.AddLocation ($$, GetLocation($2)); } ; + +named_argument_expr + : expression_or_error +// | declaration_expression + ; opt_named_modifier : /* empty */ { $$ = null; } @@ -2230,6 +2259,8 @@ operator_declarator : operator_type OPERATOR overloadable_operator OPEN_PARENS { valid_param_mod = ParameterModifierType.DefaultValue; + if ((Operator.OpType) $3 == Operator.OpType.Is) + valid_param_mod |= ParameterModifierType.Out; } opt_formal_parameter_list CLOSE_PARENS { @@ -2254,6 +2285,8 @@ operator_declarator report.Error (1535, loc, "Overloaded unary operator `{0}' takes one parameter", Operator.GetName (op)); } + } else if (op == Operator.OpType.Is) { + // TODO: Special checks for is operator } else { if (p_count == 1) { report.Error (1019, loc, "Overloadable unary operator expected"); @@ -2300,6 +2333,13 @@ overloadable_operator | OP_LT { $$ = Operator.OpType.LessThan; savedOperatorLocation = GetLocation ($1); } | OP_GE { $$ = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation ($1); } | OP_LE { $$ = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation ($1); } + | IS + { + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation ($1), "is user operator"); + savedOperatorLocation = GetLocation ($1); + $$ = Operator.OpType.Is; + } ; conversion_operator_declarator @@ -2403,11 +2443,25 @@ constructor_declarator if (lt.Value != current_container.MemberName.Name) { report.Error (1520, c.Location, "Class, struct, or interface method must have a return type"); } else if ((mods & Modifiers.STATIC) != 0) { + if (!current_local_parameters.IsEmpty) { + report.Error (132, c.Location, "`{0}': The static constructor must be parameterless", + c.GetSignatureForError ()); + } + if ((mods & Modifiers.AccessibilityMask) != 0){ report.Error (515, c.Location, "`{0}': static constructor cannot have an access modifier", c.GetSignatureForError ()); } + } else { + if (current_type.Kind == MemberKind.Struct && current_local_parameters.IsEmpty) { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation ($3), "struct parameterless instance constructor"); + + if ((mods & Modifiers.PUBLIC) == 0) { + report.Error (8075, c.Location, "`{0}': Structs parameterless instance constructor must be public", c.GetSignatureForError ()); + } + } } current_type.AddConstructor (c); @@ -2972,9 +3026,8 @@ namespace_or_type_expr { var lt1 = (LocatedToken) $1; var lt2 = (LocatedToken) $2; - var qam = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); - lbag.AddLocation (qam.TypeArguments, Lexer.GenericDimensionLocations); - $$ = qam; + + $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -2990,9 +3043,7 @@ member_name | namespace_or_type_expr DOT IDENTIFIER generic_dimension { var lt = (LocatedToken) $3; - var ma = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location); - lbag.AddLocation (ma.TypeArguments, Lexer.GenericDimensionLocations); - $$ = ma; + $$ = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location); lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -3006,9 +3057,7 @@ simple_name_expr | IDENTIFIER generic_dimension { var lt = (LocatedToken) $1; - var sn = new SimpleName (lt.Value, (int) $2, lt.Location); - lbag.AddLocation (sn.TypeArguments, Lexer.GenericDimensionLocations); - $$ = sn; + $$ = new SimpleName (lt.Value, (int) $2, lt.Location); } ; @@ -3023,7 +3072,7 @@ opt_type_argument_list FeatureIsNotAvailable (GetLocation ($1), "generics"); var list = locationListStack.Pop (); list.Add (GetLocation ($1)); - list.Add (GetLocation ($2)); + list.Add (GetLocation ($3)); lbag.AddLocation ($2, list); $$ = $2;; @@ -3326,7 +3375,7 @@ integral_type primary_expression - : primary_expression_or_type + : type_name_expression | literal | array_creation_expression | parenthesized_expression @@ -3346,9 +3395,10 @@ primary_expression | pointer_member_access | anonymous_method_expression | undocumented_expressions + | interpolated_string ; -primary_expression_or_type +type_name_expression : simple_name_expr | IDENTIFIER GENERATE_COMPLETION { var lt = (LocatedToken) $1; @@ -3368,6 +3418,71 @@ boolean_literal | FALSE { $$ = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation ($1)); } ; +interpolated_string + : INTERPOLATED_STRING interpolations INTERPOLATED_STRING_END + { + $$ = new InterpolatedString ((StringLiteral) $1, (List<Expression>) $2, (StringLiteral) $3); + } + | INTERPOLATED_STRING_END + { + $$ = new InterpolatedString ((StringLiteral) $1, null, null); + } + ; + +interpolations + : interpolation + { + var list = new List<Expression> (); + list.Add ((InterpolatedStringInsert) $1); + $$ = list; + } + | interpolations INTERPOLATED_STRING interpolation + { + var list = (List<Expression>) $1; + list.Add ((StringLiteral) $2); + list.Add ((InterpolatedStringInsert) $3); + $$ = list; + } + ; + +interpolation + : expression + { + $$ = new InterpolatedStringInsert ((Expression) $1); + } + | expression COMMA expression + { + $$ = new InterpolatedStringInsert ((Expression) $1) { + Alignment = (Expression)$3 + }; + } + | expression COLON + { + lexer.parsing_interpolation_format = true; + } + LITERAL + { + lexer.parsing_interpolation_format = false; + + $$ = new InterpolatedStringInsert ((Expression) $1) { + Format = (string)$4 + }; + } + | expression COMMA expression COLON + { + lexer.parsing_interpolation_format = true; + } + LITERAL + { + lexer.parsing_interpolation_format = false; + + $$ = new InterpolatedStringInsert ((Expression) $1) { + Alignment = (Expression)$3, + Format = (string) $6 + }; + } + ; + // // Here is the trick, tokenizer may think that parens is a special but @@ -3411,9 +3526,7 @@ member_access | primary_expression DOT identifier_inside_body generic_dimension { var lt = (LocatedToken) $3; - var ma = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location); - lbag.AddLocation (ma.TypeArguments, Lexer.GenericDimensionLocations); - $$ = ma; + $$ = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location); lbag.AddLocation ($$, GetLocation ($2)); } | primary_expression INTERR_OPERATOR DOT identifier_inside_body opt_type_argument_list @@ -3455,9 +3568,8 @@ member_access { var lt1 = (LocatedToken) $1; var lt2 = (LocatedToken) $2; - var qam = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); - lbag.AddLocation (qam.TypeArguments, Lexer.GenericDimensionLocations); - $$ = qam; + + $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); lbag.AddLocation ($$, GetLocation ($2)); } | primary_expression DOT GENERATE_COMPLETION { @@ -3674,11 +3786,19 @@ non_simple_argument $$ = new Argument ((Expression) $2, Argument.AType.Ref); lbag.AddLocation ($$, GetLocation ($1)); } + | REF declaration_expression + { + $$ = new Argument ((Expression) $2, Argument.AType.Ref); + } | OUT variable_reference { $$ = new Argument ((Expression) $2, Argument.AType.Out); lbag.AddLocation ($$, GetLocation ($1)); } + | OUT declaration_expression + { + $$ = new Argument ((Expression) $2, Argument.AType.Out); + } | ARGLIST OPEN_PARENS argument_list CLOSE_PARENS { $$ = new Argument (new Arglist ((Arguments) $3, GetLocation ($1))); @@ -3691,6 +3811,48 @@ non_simple_argument } ; +declaration_expression + : OPEN_PARENS declaration_expression CLOSE_PARENS + { + $$ = new ParenthesizedExpression ((Expression) $2, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3)); + } +/* + | CHECKED open_parens_any declaration_expression CLOSE_PARENS + { + $$ = new CheckedExpr ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + | UNCHECKED open_parens_any declaration_expression CLOSE_PARENS + { + $$ = new UnCheckedExpr ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } +*/ + | variable_type identifier_inside_body + { + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation ($1), "declaration expression"); + + var lt = (LocatedToken) $2; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + $$ = new DeclarationExpression ((FullNamedExpression) $1, lv); + } + | variable_type identifier_inside_body ASSIGN expression + { + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation ($1), "declaration expression"); + + var lt = (LocatedToken) $2; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + $$ = new DeclarationExpression ((FullNamedExpression) $1, lv) { + Initializer = (Expression) $4 + }; + } + ; + variable_reference : expression ; @@ -4391,7 +4553,7 @@ additive_expression { $$ = new As ((Expression) $1, (Expression) $3, GetLocation ($2)); } - | additive_expression IS is_match_expr opt_identifier + | additive_expression IS pattern_type_expr opt_identifier { var is_expr = new Is ((Expression) $1, (Expression) $3, GetLocation ($2)); if ($4 != null) { @@ -4405,6 +4567,14 @@ additive_expression $$ = is_expr; } + | additive_expression IS pattern_expr + { + var is_expr = new Is ((Expression) $1, (Expression) $3, GetLocation ($2)); + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation ($2), "pattern matching"); + + $$ = is_expr; + } | additive_expression AS error { Error_SyntaxError (yyToken); @@ -4429,16 +4599,12 @@ additive_expression } ; -is_match_expr - : match_type - | match_type rank_specifiers - { - if ($1 is VarExpr) - $1 = new SimpleName ("var", ((VarExpr) $1).Location); +pattern_type_expr + : variable_type + ; - $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); - } - | literal +pattern_expr + : literal | PLUS prefixed_unary_expression { $$ = new Unary (Unary.Operator.UnaryPlus, (Expression) $2, GetLocation ($1)); @@ -4447,38 +4613,106 @@ is_match_expr { $$ = new Unary (Unary.Operator.UnaryNegation, (Expression) $2, GetLocation ($1)); } + | sizeof_expression + | default_value_expression + | OPEN_PARENS_CAST type CLOSE_PARENS prefixed_unary_expression + { + $$ = new Cast ((FullNamedExpression) $2, (Expression) $4, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3)); + } + | STAR + { + $$ = new WildcardPattern (GetLocation ($1)); + } + | pattern_expr_invocation + | pattern_property ; -match_type - : primary_expression_or_type opt_nullable +pattern_expr_invocation + : type_name_expression OPEN_PARENS opt_pattern_list CLOSE_PARENS { - Expression expr = (Expression) $1; - if ($2 == null) { - SimpleName sn = expr as SimpleName; - if (sn != null && sn.Name == "var") - $$ = new VarExpr (sn.Location); - else - $$ = $1; - } else if (expr is ATypeNameExpression) { - $$ = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) $2); - } else { - Error_ExpectingTypeName (expr); - $$ = null; - } + $$ = new RecursivePattern ((ATypeNameExpression) $1, (Arguments) $3, GetLocation ($2)); } - | primary_expression_or_type pointer_stars + ; + +pattern_property + : type_name_expression OPEN_BRACE pattern_property_list CLOSE_BRACE { - ATypeNameExpression expr = $1 as ATypeNameExpression; + $$ = new PropertyPattern ((ATypeNameExpression) $1, (List<PropertyPatternMember>) $3, GetLocation ($2)); + } + ; - if (expr != null) { - $$ = new ComposedCast (expr, (ComposedTypeSpecifier) $2); - } else { - Error_ExpectingTypeName ((Expression)$1); - $$ = expr; +pattern_property_list + : pattern_property_entry + { + var list = new List<PropertyPatternMember> (); + list.Add ((PropertyPatternMember) $1); + $$ = list; + } + | pattern_property_list COMMA pattern_property_entry + { + var list = (List<PropertyPatternMember>) $1; + list.Add ((PropertyPatternMember) $3); + $$ = list; + } + ; + +pattern_property_entry + : identifier_inside_body IS pattern + { + var lt = (LocatedToken) $1; + $$ = new PropertyPatternMember (lt.Value, (Expression) $3, lt.Location); + } + ; + +pattern + : pattern_expr + | pattern_type_expr opt_identifier + { + if ($2 != null) { + var lt = (LocatedToken) $2; + var variable = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (variable); } } - | builtin_type_expression - | void_invalid + ; + +opt_pattern_list + : /* empty */ + { + $$ = new Arguments (0); + } + | pattern_list + ; + +pattern_list + : pattern_argument + { + Arguments args = new Arguments (4); + args.Add ((Argument) $1); + $$ = args; + } + | pattern_list COMMA pattern_argument + { + Arguments args = (Arguments) $1; + if (args [args.Count - 1] is NamedArgument && !($3 is NamedArgument)) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) $3); + $$ = args; + } + ; + +pattern_argument + : pattern + { + $$ = new Argument ((Expression) $1); + } + | IDENTIFIER COLON pattern + { + var lt = (LocatedToken) $1; + $$ = new NamedArgument (lt.Value, lt.Location, (Expression) $3); + } ; shift_expression @@ -4983,7 +5217,7 @@ primary_parameters // Cannot use opt_formal_parameter_list because it can be shared instance for empty parameters lbag.AppendToMember (current_container, GetLocation ($1), GetLocation ($3)); - if (lang_version < LanguageVersion.V_6) + if (lang_version != LanguageVersion.Experimental) FeatureIsNotAvailable (GetLocation ($1), "primary constructor"); } ; @@ -5572,7 +5806,7 @@ variable_type * > The expressions are converted into types during semantic analysis. */ variable_type_simple - : primary_expression_or_type opt_nullable + : type_name_expression opt_nullable { // Ok, the above "primary_expression" is there to get rid of // both reduce/reduce and shift/reduces in the grammar, it should @@ -5588,30 +5822,20 @@ variable_type_simple // SimpleName is when you have // Blah i; - Expression expr = (Expression) $1; + var expr = (ATypeNameExpression) $1; if ($2 == null) { - SimpleName sn = expr as SimpleName; - if (sn != null && sn.Name == "var") - $$ = new VarExpr (sn.Location); + if (expr.Name == "var" && expr is SimpleName) + $$ = new VarExpr (expr.Location); else $$ = $1; - } else if (expr is ATypeNameExpression) { - $$ = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) $2); } else { - Error_ExpectingTypeName (expr); - $$ = null; + $$ = new ComposedCast (expr, (ComposedTypeSpecifier) $2); } } - | primary_expression_or_type pointer_stars + | type_name_expression pointer_stars { - ATypeNameExpression expr = $1 as ATypeNameExpression; - - if (expr != null) { - $$ = new ComposedCast (expr, (ComposedTypeSpecifier) $2); - } else { - Error_ExpectingTypeName ((Expression)$1); - $$ = expr; - } + var expr = (ATypeNameExpression) $1; + $$ = new ComposedCast (expr, (ComposedTypeSpecifier) $2); } | builtin_type_expression | void_invalid @@ -5946,6 +6170,18 @@ switch_label Error_SyntaxError (yyToken); $$ = new SwitchLabel ((Expression) $2, GetLocation ($1)); } +/* + | CASE pattern_expr_invocation COLON + { + if (lang_version != LanguageVersion.Experimental) + FeatureIsNotAvailable (GetLocation ($2), "pattern matching"); + + $$ = new SwitchLabel ((Expression) $2, GetLocation ($1)) { + PatternMatching = true + }; + lbag.AddLocation ($$, GetLocation ($3)); + } +*/ | DEFAULT_COLON { $$ = new SwitchLabel (null, GetLocation ($1)); @@ -6422,8 +6658,9 @@ catch_clause lbag.AddLocation (c, GetLocation ($2), GetLocation ($5)); $$ = c; + lexer.parsing_catch_when = true; } - opt_catch_filter block_prepared + opt_catch_filter_or_error { ((Catch) $6).Filter = (CatchFilterExpression) $7; $$ = $6; @@ -6439,40 +6676,36 @@ catch_clause $$ = new Catch (null, GetLocation ($1)); } - | CATCH open_parens_any type opt_identifier CLOSE_PARENS error + ; + +opt_catch_filter_or_error + : opt_catch_filter block_prepared { + $$ = $1; + } + | error + { + end_block (Location.Null); Error_SyntaxError (yyToken); - - // Required otherwise missing block could not be detected because - // start_block is run early - var c = new Catch (null, GetLocation ($1)); - c.TypeExpression = (FullNamedExpression) $3; - - if ($4 != null) { - var lt = (LocatedToken) $4; - c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); - } - - if ($4 != null) { - var lt = (LocatedToken) $4; - c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); - } - - lbag.AddLocation (c, GetLocation ($2), GetLocation ($5)); - - $$ = c; + $$ = null; } ; opt_catch_filter - : /* empty */ - | IF open_parens_any expression CLOSE_PARENS + : { + lexer.parsing_catch_when = false; + } + | WHEN + { + lexer.parsing_catch_when = false; + } + open_parens_any expression CLOSE_PARENS { if (lang_version <= LanguageVersion.V_5) FeatureIsNotAvailable (GetLocation ($1), "exception filter"); - $$ = new CatchFilterExpression ((Expression) $3, GetLocation ($1)); - lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + $$ = new CatchFilterExpression ((Expression) $4, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); } ; @@ -8097,7 +8330,13 @@ static string GetTokenName (int token) return ";"; case Token.TILDE: return "~"; - + case Token.WHEN: + return "when"; + case Token.INTERPOLATED_STRING_END: + return "}"; + case Token.INTERPOLATED_STRING: + return "${"; + case Token.PLUS: case Token.UMINUS: case Token.MINUS: @@ -8132,6 +8371,7 @@ static string GetTokenName (int token) case Token.OP_AND_ASSIGN: case Token.OP_XOR_ASSIGN: case Token.OP_OR_ASSIGN: + case Token.INTERR_OPERATOR: return "<operator>"; case Token.BOOL: diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs index a423eb50..1d2ae3a9 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs @@ -236,6 +236,12 @@ namespace Mono.CSharp public bool parsing_modifiers; + public bool parsing_catch_when; + + int parsing_string_interpolation; + + public bool parsing_interpolation_format; + // // The special characters to inject on streams to run the unit parser // in the special expression mode. Using private characters from @@ -638,6 +644,9 @@ namespace Mono.CSharp AddKeyword ("async", Token.ASYNC); AddKeyword ("await", Token.AWAIT); + // Contextual filter catch keyword + AddKeyword ("when", Token.WHEN); + keywords_preprocessor = new KeywordEntry<PreprocessorDirective>[10][]; AddPreprocessorKeyword ("region", PreprocessorDirective.Region); @@ -711,6 +720,10 @@ namespace Mono.CSharp res = Token.DEFAULT_COLON; } break; + case Token.WHEN: + if (current_token != Token.CATCH && !parsing_catch_when) + res = -1; + break; case Token.WHERE: if (!(handle_where && current_token != Token.COLON) && !query_parsing) res = -1; @@ -1048,6 +1061,7 @@ namespace Mono.CSharp case Token.BYTE: case Token.DECIMAL: case Token.BOOL: + case Token.STRING: return Token.OPEN_PARENS_CAST; } } @@ -1152,21 +1166,9 @@ namespace Mono.CSharp return true; } - Stack<List<Location>> genericDimensionLocations = new Stack<List<Location>> (); - - public List<Location> GenericDimensionLocations { - get { - if (genericDimensionLocations.Count == 0) - return null; - return genericDimensionLocations.Pop (); - } - } - bool parse_less_than (ref int genericDimension) { - genericDimensionLocations.Push (new List<Location> ()); - genericDimensionLocations.Peek ().Add (Location); - start: + start: int the_token = token (); if (the_token == Token.OPEN_BRACKET) { while (true) { @@ -1202,65 +1204,51 @@ namespace Mono.CSharp break; case Token.OP_GENERICS_GT: genericDimension = 1; - genericDimensionLocations.Peek ().Add (Location); return true; case Token.IN: case Token.OUT: - genericDimensionLocations.Pop (); return true; case Token.COMMA: do { ++genericDimension; - if (genericDimensionLocations.Count > 0) - genericDimensionLocations.Peek ().Add (Location); the_token = token (); } while (the_token == Token.COMMA); if (the_token == Token.OP_GENERICS_GT) { ++genericDimension; - if (genericDimensionLocations.Count > 0) - genericDimensionLocations.Peek ().Add (Location); return true; } - genericDimensionLocations.Pop (); return false; default: - genericDimensionLocations.Pop (); return false; } - again: + again: the_token = token (); - if (the_token == Token.OP_GENERICS_GT) { - genericDimensionLocations.Peek ().Add (Location); + + if (the_token == Token.OP_GENERICS_GT) return true; - } else if (the_token == Token.COMMA || the_token == Token.DOT || the_token == Token.DOUBLE_COLON) goto start; else if (the_token == Token.INTERR_NULLABLE || the_token == Token.STAR) goto again; else if (the_token == Token.OP_GENERICS_LT) { - if (!parse_less_than (ref genericDimension)) { - genericDimensionLocations.Pop (); + if (!parse_less_than (ref genericDimension)) return false; - } goto again; } else if (the_token == Token.OPEN_BRACKET) { - rank_specifiers: + rank_specifiers: the_token = token (); if (the_token == Token.CLOSE_BRACKET) goto again; else if (the_token == Token.COMMA) goto rank_specifiers; - genericDimensionLocations.Pop (); return false; } - genericDimensionLocations.Pop (); return false; } - public int peek_token () { int the_token; @@ -1309,6 +1297,7 @@ namespace Mono.CSharp int next_token; int parens = 0; int generics = 0; + int brackets = 0; var nt = xtoken (); switch (nt) { @@ -1374,6 +1363,11 @@ namespace Mono.CSharp ++parens; goto default; + case Token.OPEN_BRACKET: + case Token.OPEN_BRACKET_EXPR: + ++brackets; + goto default; + case Token.CLOSE_PARENS: --parens; goto default; @@ -1389,7 +1383,6 @@ namespace Mono.CSharp int interrs = 1; int colons = 0; int braces = 0; - int brackets = 0; // // All shorcuts failed, do it hard way // @@ -2030,7 +2023,7 @@ namespace Mono.CSharp return current_token; } - int TokenizePreprocessorIdentifier (out int c) + int TokenizePreprocessorKeyword (out int c) { int startCol, endLine, endCol; return TokenizePreprocessorIdentifier (out c, out startCol, out endLine, out endCol); @@ -2159,7 +2152,7 @@ namespace Mono.CSharp int c; - int length = TokenizePreprocessorIdentifier (out c); + int length = TokenizePreprocessorKeyword (out c); if (length == line_default.Length) { if (!IsTokenIdentifierEqual (line_default)) return false; @@ -2498,16 +2491,60 @@ namespace Mono.CSharp return string_builder.ToString (); } - int TokenizePragmaNumber (ref int c) + int TokenizePragmaWarningIdentifier (ref int c, ref bool identifier) { - number_pos = 0; - int number; + if ((c >= '0' && c <= '9') || is_identifier_start_character (c)) { + int number; - if (c >= '0' && c <= '9') { - number = TokenizeNumber (c); + if (c >= '0' && c <= '9') { + number_pos = 0; + number = TokenizeNumber (c); - c = get_char (); + c = get_char (); + + if (c != ' ' && c != '\t' && c != ',' && c != '\n' && c != -1 && c != UnicodeLS && c != UnicodePS) { + return ReadPragmaWarningComment (c); + } + } else { + // + // LAMESPEC v6: No spec what identifier really is in this context, it seems keywords are allowed too + // + int pos = 0; + number = -1; + id_builder [pos++] = (char)c; + while (c < MaxIdentifierLength) { + c = reader.Read (); + id_builder [pos] = (char)c; + + if (c >= '0' && c <= '9') { + if (pos == 6 && id_builder [0] == 'C' && id_builder [1] == 'S') { + // Recognize CSXXXX as C# XXXX warning + number = 0; + int pow = 1000; + for (int i = 0; i < 4; ++i) { + var ch = id_builder [i + 2]; + if (ch < '0' || ch > '9') { + number = -1; + break; + } + + number += (ch - '0') * pow; + pow /= 10; + } + } + } else if ((c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && c != '_') { + break; + } + + ++pos; + } + + if (number < 0) { + identifier = true; + number = pos; + } + } // skip over white space while (c == ' ' || c == '\t') @@ -2520,19 +2557,25 @@ namespace Mono.CSharp // skip over white space while (c == ' ' || c == '\t') c = get_char (); + + return number; + } + + return ReadPragmaWarningComment (c); + } + + int ReadPragmaWarningComment (int c) + { + if (c == '/') { + ReadSingleLineComment (); } else { - number = -1; - if (c == '/') { - ReadSingleLineComment (); - } else { - Report.Warning (1692, 1, Location, "Invalid number"); + Report.Warning (1692, 1, Location, "Invalid number"); - // Read everything till the end of the line or file - ReadToEndOfLine (); - } + // Read everything till the end of the line or file + ReadToEndOfLine (); } - return number; + return -1; } void ReadToEndOfLine () @@ -2617,10 +2660,8 @@ namespace Mono.CSharp int code; do { var startLoc = loc; - #if FULL_AST - // int read_start = reader.Position; - #endif - code = TokenizePragmaNumber (ref c); + bool identifier = false; + code = TokenizePragmaWarningIdentifier (ref c, ref identifier); if (code > 0) { #if FULL_AST var literal = new IntConstant(context.BuiltinTypes, code, startLoc); @@ -2628,7 +2669,9 @@ namespace Mono.CSharp pragmaDirective.Codes.Add (literal); // literal.ParsedValue = reader.ReadChars (read_start, reader.Position + 1); #endif - if (disable) { + if (identifier) { + // no-op, custom warnings cannot occur in mcs + } else if (disable) { Report.RegisterWarningRegion (loc).WarningDisable (loc, code, context.Report); } else { Report.RegisterWarningRegion (loc).WarningEnable (loc, code, context); @@ -3076,7 +3119,7 @@ namespace Mono.CSharp throw new NotImplementedException (directive.ToString ()); } - private int consume_string (bool quoted) + int consume_string (bool quoted) { int c; int pos = 0; @@ -3111,15 +3154,7 @@ namespace Mono.CSharp continue; } - string s; - if (pos == 0) - s = string.Empty; - else if (pos <= 4) - s = InternIdentifier (value_builder, pos); - else - s = new string (value_builder, 0, pos); - - ILiteralConstant res = new StringLiteral (context.BuiltinTypes, s, start_location); + ILiteralConstant res = new StringLiteral (context.BuiltinTypes, CreateStringFromBuilder (pos), start_location); val = res; #if FULL_AST res.ParsedValue = quoted ? @@ -3310,6 +3345,10 @@ namespace Mono.CSharp public int xtoken () { + if (parsing_interpolation_format) { + return TokenizeInterpolationFormat (); + } + int d, c; // Whether we have seen comments on the current line @@ -3347,6 +3386,15 @@ namespace Mono.CSharp val = ltb.Create (current_source, ref_line, col); return Token.OPEN_BRACE; case '}': + if (parsing_string_interpolation > 0) { + if (peek_char () != '}') { + --parsing_string_interpolation; + return TokenizeInterpolatedString (); + } + + continue; + } + val = ltb.Create (current_source, ref_line, col); return Token.CLOSE_BRACE; case '[': @@ -3571,7 +3619,12 @@ namespace Mono.CSharp return Token.OP_DIV_ASSIGN; } // Handle double-slash comments. - if (d == '/') { + if (d == '/'){ + if (parsing_string_interpolation > 0) { + Report.Error (8077, Location, "A single-line comment may not be used in an interpolated string"); + goto case '}'; + } + get_char (); if (doc_processing) { if (peek_char () == '/') { @@ -3780,6 +3833,13 @@ namespace Mono.CSharp return Token.EOF; case '"': + if (parsing_string_interpolation > 0) { + parsing_string_interpolation = 0; + Report.Error (8076, Location, "Missing close delimiter `}' for interpolated expression"); + val = null; + return Token.INTERPOLATED_STRING_END; + } + return consume_string (false); case '\'': @@ -3799,6 +3859,13 @@ namespace Mono.CSharp Report.Error (1646, Location, "Keyword, identifier, or string expected after verbatim specifier: @"); return Token.ERROR; + case '$': + if (peek_char () == '"') { + get_char (); + return TokenizeInterpolatedString (); + } + + break; case EvalStatementParserCharacter: return Token.EVAL_STATEMENT_PARSER; case EvalCompilationUnitParserCharacter: @@ -3924,6 +3991,120 @@ namespace Mono.CSharp return Token.OP_LT; } + int TokenizeInterpolatedString () + { + int pos = 0; + var start_location = Location; + + while (true) { + var ch = get_char (); + switch (ch) { + case '"': + val = new StringLiteral (context.BuiltinTypes, CreateStringFromBuilder (pos), start_location); + return Token.INTERPOLATED_STRING_END; + case '{': + if (peek_char () == '{') { + value_builder [pos++] = (char)ch; + get_char (); + break; + } + + ++parsing_string_interpolation; + val = new StringLiteral (context.BuiltinTypes, CreateStringFromBuilder (pos), start_location); + return Token.INTERPOLATED_STRING; + case '\\': + ++col; + int surrogate; + ch = escape (ch, out surrogate); + if (ch == -1) + return Token.ERROR; + + if (ch == '{' || ch == '}') { + Report.Error (8087, Location, "A `{0}' character may only be escaped by doubling `{0}{0}' in an interpolated string", ((char) ch).ToString ()); + } + + if (surrogate != 0) { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder [pos++] = (char)ch; + ch = surrogate; + } + + break; + case -1: + return Token.EOF; + } + + ++col; + value_builder[pos++] = (char) ch; + } + } + + int TokenizeInterpolationFormat () + { + int pos = 0; + int braces = 0; + while (true) { + var ch = get_char (); + switch (ch) { + case '{': + ++braces; + break; + case '}': + if (braces == 0) { + putback_char = ch; + if (pos == 0) { + Report.Error (8089, Location, "Empty interpolated expression format specifier"); + } else if (Array.IndexOf (simple_whitespaces, value_builder [pos - 1]) >= 0) { + Report.Error (8088, Location, "A interpolated expression format specifier may not contain trailing whitespace"); + } + + val = CreateStringFromBuilder (pos); + return Token.LITERAL; + } + + --braces; + break; + case '\\': + ++col; + int surrogate; + ch = escape (ch, out surrogate); + if (ch == -1) + return Token.ERROR; + + if (ch == '{' || ch == '}') { + Report.Error (8087, Location, "A `{0}' character may only be escaped by doubling `{0}{0}' in an interpolated string", ((char) ch).ToString ()); + } + + if (surrogate != 0) { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder [pos++] = (char)ch; + ch = surrogate; + } + + break; + case -1: + return Token.EOF; + } + + ++col; + value_builder[pos++] = (char) ch; + } + } + + string CreateStringFromBuilder (int pos) + { + if (pos == 0) + return string.Empty; + if (pos <= 4) + return InternIdentifier (value_builder, pos); + + return new string (value_builder, 0, pos); + } + // // Handles one line xml comment // diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs index 56d423ad..16f8bcb3 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs @@ -195,11 +195,6 @@ namespace Mono.CSharp { return name + "`" + args.Count; } - - public static string MakeName (string name, int count) - { - return name + "`" + count; - } } public class SimpleMemberName @@ -675,13 +670,13 @@ namespace Mono.CSharp { // Does extension methods look up to find a method which matches name and extensionType. // Search starts from this namespace and continues hierarchically up to top level. // - public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + public ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) { var m = Parent; do { var ns = m as NamespaceContainer; if (ns != null) - return ns.LookupExtensionMethod (this, extensionType, name, arity, 0); + return ns.LookupExtensionMethod (this, name, arity, 0); m = m.Parent; } while (m != null); @@ -1130,7 +1125,7 @@ namespace Mono.CSharp { public virtual string GetSignatureForError () { - var bf = MemberDefinition as Property.BackingField; + var bf = MemberDefinition as Property.BackingFieldDeclaration; string name; if (bf == null) { name = Name; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs index 612d1163..2582f200 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs @@ -294,6 +294,9 @@ namespace Mono.CSharp { public override void PrepareEmit () { + if ((caching_flags & Flags.CloseTypeCreated) != 0) + return; + if (!Parameters.IsEmpty) { parameters.ResolveDefaultValues (this); } @@ -646,7 +649,8 @@ namespace Mono.CSharp { var invoke = Delegate.GetInvokeMethod (target_type); Arguments arguments = CreateDelegateMethodArguments (ec, invoke.Parameters, invoke.Parameters.Types, mg.Location); - return mg.OverloadResolve (ec, ref arguments, null, OverloadResolver.Restrictions.CovariantDelegate | OverloadResolver.Restrictions.ProbingOnly) != null; + mg = mg.OverloadResolve (ec, ref arguments, null, OverloadResolver.Restrictions.CovariantDelegate | OverloadResolver.Restrictions.ProbingOnly); + return mg != null && Delegate.IsTypeCovariant (ec, mg.BestCandidateReturnType, invoke.ReturnType); } #region IErrorHandler Members diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs index 35fe5852..adf6ea08 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs @@ -695,7 +695,7 @@ namespace Mono.CSharp return host.GetSignatureForError (); } - public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + public ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) { return null; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs index 5604a3fc..33fb4555 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs @@ -289,6 +289,13 @@ namespace Mono.CSharp protected bool DoResolveCore (ResolveContext rc) { + foreach (var arg in arguments) { + if (arg.Type == InternalType.VarOutType) { + // Should be special error message about dynamic dispatch + rc.Report.Error (8047, arg.Expr.Location, "Declaration expression cannot be used in this context"); + } + } + if (rc.CurrentTypeParameters != null && rc.CurrentTypeParameters[0].IsMethodTypeParameter) context_mvars = rc.CurrentTypeParameters; @@ -780,7 +787,7 @@ namespace Mono.CSharp if (member != null && member.HasTypeArguments) { TypeArguments ta = member.TypeArguments; - if (ta.Resolve (ec)) { + if (ta.Resolve (ec, false)) { var targs = new ArrayInitializer (ta.Count, loc); foreach (TypeSpec t in ta.Arguments) targs.Add (new TypeOf (t, loc)); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs index d1e2c3b8..c581a748 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs @@ -230,10 +230,10 @@ namespace Mono.CSharp { // public virtual TypeSpec ResolveAsType (IMemberContext mc, bool allowUnboundTypeArguments = false) { - ResolveContext ec = new ResolveContext (mc); - Expression e = Resolve (ec); + var rc = mc as ResolveContext ?? new ResolveContext (mc); + Expression e = Resolve (rc); if (e != null) - e.Error_UnexpectedKind (ec, ResolveFlags.Type, loc); + e.Error_UnexpectedKind (rc, ResolveFlags.Type, loc); return null; } @@ -345,7 +345,7 @@ namespace Mono.CSharp { exprType, name); } - protected virtual void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) + public virtual void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) { Error_TypeDoesNotContainDefinition (ec, loc, type, name); } @@ -457,6 +457,8 @@ namespace Mono.CSharp { return false; case MemberKind.InternalCompilerType: return type.BuiltinType == BuiltinTypeSpec.Type.Dynamic; + case MemberKind.TypeParameter: + return !((TypeParameterSpec) type).IsValueType; default: return true; } @@ -764,6 +766,10 @@ namespace Mono.CSharp { if (ctors == null) { switch (type.Kind) { case MemberKind.Struct: + // Every struct has implicit default constructor if not provided by user + if (args == null) + return null; + rc.Report.SymbolRelatedToPreviousError (type); // Report meaningful error for struct as they always have default ctor in C# context OverloadResolver.Error_ConstructorMismatch (rc, type, args == null ? 0 : args.Count, loc); @@ -784,6 +790,18 @@ namespace Mono.CSharp { return null; } + if (args == null && type.IsStruct) { + bool includes_empty = false; + foreach (MethodSpec ctor in ctors) { + if (ctor.Parameters.IsEmpty) { + includes_empty = true; + } + } + + if (!includes_empty) + return null; + } + var r = new OverloadResolver (ctors, OverloadResolver.Restrictions.NoBaseMembers, loc); if (!rc.HasSet (ResolveContext.Options.BaseInitializer)) { r.InstanceQualifier = new ConstructorInstanceQualifier (type); @@ -801,7 +819,8 @@ namespace Mono.CSharp { ReadAccess = 1 << 3, EmptyArguments = 1 << 4, IgnoreArity = 1 << 5, - IgnoreAmbiguity = 1 << 6 + IgnoreAmbiguity = 1 << 6, + NameOfExcluded = 1 << 7, } // @@ -814,107 +833,117 @@ namespace Mono.CSharp { if (members == null) return null; - MemberSpec non_method = null; - MemberSpec ambig_non_method = null; + Expression expr; do { - for (int i = 0; i < members.Count; ++i) { - var member = members[i]; + expr = MemberLookupToExpression (rc, members, errorMode, queried_type, name, arity, restrictions, loc); + if (expr != null) + return expr; - // HACK: for events because +=/-= can appear at same class only, should use OverrideToBase there - if ((member.Modifiers & Modifiers.OVERRIDE) != 0 && member.Kind != MemberKind.Event) - continue; + if (members [0].DeclaringType.BaseType == null) + members = null; + else + members = MemberCache.FindMembers (members [0].DeclaringType.BaseType, name, false); + } while (members != null); - if ((member.Modifiers & Modifiers.BACKING_FIELD) != 0 || member.Kind == MemberKind.Operator) - continue; + return expr; + } - if ((arity > 0 || (restrictions & MemberLookupRestrictions.ExactArity) != 0) && member.Arity != arity) - continue; + public static Expression MemberLookupToExpression (IMemberContext rc, IList<MemberSpec> members, bool errorMode, TypeSpec queried_type, string name, int arity, MemberLookupRestrictions restrictions, Location loc) + { + MemberSpec non_method = null; + MemberSpec ambig_non_method = null; - if (!errorMode) { - if (!member.IsAccessible (rc)) - continue; + for (int i = 0; i < members.Count; ++i) { + var member = members [i]; - // - // With runtime binder we can have a situation where queried type is inaccessible - // because it came via dynamic object, the check about inconsisted accessibility - // had no effect as the type was unknown during compilation - // - // class A { - // private class N { } - // - // public dynamic Foo () - // { - // return new N (); - // } - // } - // - if (rc.Module.Compiler.IsRuntimeBinder && !member.DeclaringType.IsAccessible (rc)) - continue; - } + // HACK: for events because +=/-= can appear at same class only, should use OverrideToBase there + if ((member.Modifiers & Modifiers.OVERRIDE) != 0 && member.Kind != MemberKind.Event) + continue; - if ((restrictions & MemberLookupRestrictions.InvocableOnly) != 0) { - if (member is MethodSpec) { - // - // Interface members that are hidden by class members are removed from the set. This - // step only has an effect if T is a type parameter and T has both an effective base - // class other than object and a non-empty effective interface set - // - var tps = queried_type as TypeParameterSpec; - if (tps != null && tps.HasTypeConstraint) - members = RemoveHiddenTypeParameterMethods (members); + if ((member.Modifiers & Modifiers.BACKING_FIELD) != 0 || member.Kind == MemberKind.Operator) + continue; - return new MethodGroupExpr (members, queried_type, loc); - } + if ((arity > 0 || (restrictions & MemberLookupRestrictions.ExactArity) != 0) && member.Arity != arity) + continue; - if (!Invocation.IsMemberInvocable (member)) - continue; - } + if (!errorMode) { + if (!member.IsAccessible (rc)) + continue; - if (non_method == null || member is MethodSpec || non_method.IsNotCSharpCompatible) { - non_method = member; - } else if (!errorMode && !member.IsNotCSharpCompatible) { - // - // Interface members that are hidden by class members are removed from the set when T is a type parameter and - // T has both an effective base class other than object and a non-empty effective interface set. + // + // With runtime binder we can have a situation where queried type is inaccessible + // because it came via dynamic object, the check about inconsisted accessibility + // had no effect as the type was unknown during compilation + // + // class A { + // private class N { } + // + // public dynamic Foo () + // { + // return new N (); + // } + // } + // + if (rc.Module.Compiler.IsRuntimeBinder && !member.DeclaringType.IsAccessible (rc)) + continue; + } + + if ((restrictions & MemberLookupRestrictions.InvocableOnly) != 0) { + if (member is MethodSpec) { // - // The spec has more complex rules but we simply remove all members declared in an interface declaration. + // Interface members that are hidden by class members are removed from the set. This + // step only has an effect if T is a type parameter and T has both an effective base + // class other than object and a non-empty effective interface set // var tps = queried_type as TypeParameterSpec; - if (tps != null && tps.HasTypeConstraint) { - if (non_method.DeclaringType.IsClass && member.DeclaringType.IsInterface) - continue; - - if (non_method.DeclaringType.IsInterface && member.DeclaringType.IsInterface) { - non_method = member; - continue; - } - } + if (tps != null && tps.HasTypeConstraint) + members = RemoveHiddenTypeParameterMethods (members); - ambig_non_method = member; + return new MethodGroupExpr (members, queried_type, loc); } + + if (!Invocation.IsMemberInvocable (member)) + continue; } - if (non_method != null) { - if (ambig_non_method != null && rc != null && (restrictions & MemberLookupRestrictions.IgnoreAmbiguity) == 0) { - var report = rc.Module.Compiler.Report; - report.SymbolRelatedToPreviousError (non_method); - report.SymbolRelatedToPreviousError (ambig_non_method); - report.Error (229, loc, "Ambiguity between `{0}' and `{1}'", - non_method.GetSignatureForError (), ambig_non_method.GetSignatureForError ()); + if (non_method == null || member is MethodSpec || non_method.IsNotCSharpCompatible) { + non_method = member; + } else if (!errorMode && !member.IsNotCSharpCompatible) { + // + // Interface members that are hidden by class members are removed from the set when T is a type parameter and + // T has both an effective base class other than object and a non-empty effective interface set. + // + // The spec has more complex rules but we simply remove all members declared in an interface declaration. + // + var tps = queried_type as TypeParameterSpec; + if (tps != null && tps.HasTypeConstraint) { + if (non_method.DeclaringType.IsClass && member.DeclaringType.IsInterface) + continue; + + if (non_method.DeclaringType.IsInterface && member.DeclaringType.IsInterface) { + non_method = member; + continue; + } } - if (non_method is MethodSpec) - return new MethodGroupExpr (members, queried_type, loc); + ambig_non_method = member; + } + } - return ExprClassFromMemberInfo (non_method, loc); + if (non_method != null) { + if (ambig_non_method != null && rc != null && (restrictions & MemberLookupRestrictions.IgnoreAmbiguity) == 0) { + var report = rc.Module.Compiler.Report; + report.SymbolRelatedToPreviousError (non_method); + report.SymbolRelatedToPreviousError (ambig_non_method); + report.Error (229, loc, "Ambiguity between `{0}' and `{1}'", + non_method.GetSignatureForError (), ambig_non_method.GetSignatureForError ()); } - if (members[0].DeclaringType.BaseType == null) - members = null; - else - members = MemberCache.FindMembers (members[0].DeclaringType.BaseType, name, false); + if (non_method is MethodSpec) + return new MethodGroupExpr (members, queried_type, loc); - } while (members != null); + return ExprClassFromMemberInfo (non_method, loc); + } return null; } @@ -1026,7 +1055,11 @@ namespace Mono.CSharp { static Expression GetOperatorTrueOrFalse (ResolveContext ec, Expression e, bool is_true, Location loc) { var op = is_true ? Operator.OpType.True : Operator.OpType.False; - var methods = MemberCache.GetUserOperator (e.type, op, false); + var type = e.type; + if (type.IsNullableType) + type = Nullable.NullableInfo.GetUnderlyingType (type); + + var methods = MemberCache.GetUserOperator (type, op, false); if (methods == null) return null; @@ -2499,13 +2532,13 @@ namespace Mono.CSharp { } protected ATypeNameExpression (string name, int arity, Location l) - : this (name, new UnboundTypeArguments (arity), l) + : this (name, new UnboundTypeArguments (arity, l), l) { } #region Properties - protected int Arity { + public int Arity { get { return targs == null ? 0 : targs.Count; } @@ -2541,11 +2574,6 @@ namespace Mono.CSharp { (targs == null || targs.Equals (atne.targs)); } - protected void Error_OpenGenericTypeIsNotAllowed (IMemberContext mc) - { - mc.Module.Compiler.Report.Error (7003, Location, "Unbound generic name is not valid in this context"); - } - public override int GetHashCode () { return Name.GetHashCode (); @@ -2681,8 +2709,7 @@ namespace Mono.CSharp { return ct; } - if (!allowUnboundTypeArguments) - Error_OpenGenericTypeIsNotAllowed (mc); + targs.Resolve (mc, allowUnboundTypeArguments); return new GenericOpenTypeExpr (fne.Type, loc); } @@ -2694,7 +2721,7 @@ namespace Mono.CSharp { return fne; } - if (Arity == 0 && Name == "dynamic" && mc.Module.Compiler.Settings.Version > LanguageVersion.V_3) { + if (Arity == 0 && Name == "dynamic" && !(mc is NamespaceContainer) && mc.Module.Compiler.Settings.Version > LanguageVersion.V_3) { if (!mc.Module.PredefinedAttributes.Dynamic.IsDefined) { mc.Module.Compiler.Report.Error (1980, Location, "Dynamic keyword requires `{0}' to be defined. Are you missing System.Core.dll assembly reference?", @@ -2817,7 +2844,7 @@ namespace Mono.CSharp { me = me.ResolveMemberAccess (rc, null, null); if (Arity > 0) { - targs.Resolve (rc); + targs.Resolve (rc, false); me.SetTypeArguments (rc, targs); } @@ -2838,16 +2865,19 @@ namespace Mono.CSharp { } } - var mg = NamespaceContainer.LookupStaticUsings (rc, Name, Arity, loc); - if (mg != null) { + var expr = NamespaceContainer.LookupStaticUsings (rc, Name, Arity, loc); + if (expr != null) { if (Arity > 0) { - targs.Resolve (rc); - mg.SetTypeArguments (rc, targs); + targs.Resolve (rc, false); + + var me = expr as MemberExpr; + if (me != null) + me.SetTypeArguments (rc, targs); } - return mg; + return expr; } - if (Name == "nameof") + if ((restrictions & MemberLookupRestrictions.NameOfExcluded) == 0 && Name == "nameof") return new NameOf (this); if (errorMode) { @@ -3113,7 +3143,7 @@ namespace Mono.CSharp { return this; } - public void Error_NamespaceDoesNotExist (IMemberContext ctx, string name, int arity) + public void Error_NamespaceDoesNotExist (IMemberContext ctx, string name, int arity, Location loc) { var retval = Namespace.LookupType (ctx, name, arity, LookupMode.IgnoreAccessibility, loc); if (retval != null) { @@ -3191,6 +3221,11 @@ namespace Mono.CSharp { { return ns.LookupTypeOrNamespace (ctx, name, arity, mode, loc); } + + public override string ToString () + { + return Namespace.Name; + } } /// <summary> @@ -3704,13 +3739,49 @@ namespace Mono.CSharp { int arity = type_arguments == null ? 0 : type_arguments.Count; - candidates = candidates.Container.LookupExtensionMethod (candidates.Context, ExtensionExpression.Type, Name, arity, candidates.LookupIndex); + candidates = candidates.Container.LookupExtensionMethod (candidates.Context, Name, arity, candidates.LookupIndex); if (candidates == null) return null; return candidates.Methods.Cast<MemberSpec> ().ToList (); } + public static bool IsExtensionTypeCompatible (TypeSpec argType, TypeSpec extensionType) + { + // + // Indentity, implicit reference or boxing conversion must exist for the extension parameter + // + // LAMESPEC: or implicit type parameter conversion + // + return argType == extensionType || + TypeSpecComparer.IsEqual (argType, extensionType) || + Convert.ImplicitReferenceConversionExists (argType, extensionType, false) || + Convert.ImplicitBoxingConversion (null, argType, extensionType) != null; + } + + public bool ResolveNameOf (ResolveContext rc, MemberAccess ma) + { + rc.Report.Error (8093, ma.Location, "An argument to nameof operator cannot be extension method group"); + + // Not included in C#6 + /* + ExtensionExpression = ExtensionExpression.Resolve (rc); + if (ExtensionExpression == null) + return false; + + var argType = ExtensionExpression.Type; + foreach (MethodSpec candidate in Candidates) { + if (ExtensionMethodGroupExpr.IsExtensionTypeCompatible (argType, candidate.Parameters.ExtensionMethodType)) + return true; + } + + // TODO: Scan full hierarchy + + ma.Error_TypeDoesNotContainDefinition (rc, argType, ma.Name); + */ + return false; + } + public override MethodGroupExpr LookupExtensionMethod (ResolveContext rc) { // We are already here @@ -3763,14 +3834,15 @@ namespace Mono.CSharp { bool OverloadResolver.IErrorHandler.ArgumentMismatch (ResolveContext rc, MemberSpec best, Argument arg, int index) { rc.Report.SymbolRelatedToPreviousError (best); - rc.Report.Error (1928, loc, - "Type `{0}' does not contain a member `{1}' and the best extension method overload `{2}' has some invalid arguments", - queried_type.GetSignatureForError (), Name, best.GetSignatureForError ()); if (index == 0) { rc.Report.Error (1929, loc, - "Extension method instance type `{0}' cannot be converted to `{1}'", - arg.Type.GetSignatureForError (), ((MethodSpec)best).Parameters.ExtensionMethodType.GetSignatureForError ()); + "Type `{0}' does not contain a member `{1}' and the best extension method overload `{2}' requires an instance of type `{3}'", + queried_type.GetSignatureForError (), Name, best.GetSignatureForError (), ((MethodSpec)best).Parameters.ExtensionMethodType.GetSignatureForError ()); + } else { + rc.Report.Error (1928, loc, + "Type `{0}' does not contain a member `{1}' and the best extension method overload `{2}' has some invalid arguments", + queried_type.GetSignatureForError (), Name, best.GetSignatureForError ()); } return true; @@ -3978,6 +4050,16 @@ namespace Mono.CSharp { Name, target.GetSignatureForError ()); } + public bool HasAccessibleCandidate (ResolveContext rc) + { + foreach (var candidate in Candidates) { + if (candidate.IsAccessible (rc)) + return true; + } + + return false; + } + public static bool IsExtensionMethodArgument (Expression expr) { // @@ -4127,7 +4209,7 @@ namespace Mono.CSharp { return null; int arity = type_arguments == null ? 0 : type_arguments.Count; - var methods = rc.LookupExtensionMethod (InstanceExpression.Type, Methods[0].Name, arity); + var methods = rc.LookupExtensionMethod (Methods[0].Name, arity); if (methods == null) return null; @@ -4596,8 +4678,17 @@ namespace Mono.CSharp { // // Tie-breaking rules are applied only for equivalent parameter types // - if (!are_equivalent) + if (!are_equivalent) { + // + // LAMESPEC: A candidate with less default parameters is still better when there + // is no better expression conversion + // + if (candidate_pd.Count < best_pd.Count && !candidate_params && best_pd.FixedParameters [j].HasDefaultValue) { + return true; + } + return false; + } // // If candidate is applicable in its normal form and best has a params array and is applicable @@ -4724,11 +4815,23 @@ namespace Mono.CSharp { // one being the virtual base for the parameter types and modifiers. // // A return value rates candidate method compatibility, - // 0 = the best, int.MaxValue = the worst // -1 = fatal error + // 0 = the best, int.MaxValue = the worst // int IsApplicable (ResolveContext ec, ref Arguments arguments, int arg_count, ref MemberSpec candidate, IParametersMember pm, ref bool params_expanded_form, ref bool dynamicArgument, ref TypeSpec returnType, bool errorMode) { + // + // Each step has allocated 10 values, it can overflow for + // more than 10 arguments but that's ok as it's used for + // better error reporting only + // + const int ArgumentCountMismatch = 1000000000; + const int NamedArgumentsMismatch = 100000000; + const int DefaultArgumentMismatch = 10000000; + const int UnexpectedTypeArguments = 1000000; + const int TypeArgumentsMismatch = 100000; + const int InflatedTypesMismatch = 10000; + // Parameters of most-derived type used mainly for named and optional parameters var pd = pm.Parameters; @@ -4761,17 +4864,17 @@ namespace Mono.CSharp { param_count--; } else if (arg_count > param_count) { int args_gap = System.Math.Abs (arg_count - param_count); - return int.MaxValue - 10000 + args_gap; + return ArgumentCountMismatch + args_gap; } else if (arg_count < param_count - optional_count) { int args_gap = System.Math.Abs (param_count - optional_count - arg_count); - return int.MaxValue - 10000 + args_gap; + return ArgumentCountMismatch + args_gap; } } else if (arg_count != param_count) { int args_gap = System.Math.Abs (arg_count - param_count); if (!cpd.HasParams) - return int.MaxValue - 10000 + args_gap; + return ArgumentCountMismatch + args_gap; if (arg_count < param_count - 1) - return int.MaxValue - 10000 + args_gap; + return ArgumentCountMismatch + args_gap; } // Resize to fit optional arguments @@ -4808,7 +4911,7 @@ namespace Mono.CSharp { // Named parameter not found if (index < 0) - return (i + 1) * 3; + return NamedArgumentsMismatch - i; // already reordered if (index == i) @@ -4824,8 +4927,8 @@ namespace Mono.CSharp { ++arg_count; temp = null; } else { - if (index == arg_count) - return (i + 1) * 3; + if (index == arg_count) + return NamedArgumentsMismatch - i - 1; temp = arguments [index]; @@ -4862,7 +4965,7 @@ namespace Mono.CSharp { // Don't do any expensive checks when the candidate cannot succeed // if (arg_count != param_count && !cpd.HasParams) - return (param_count - arg_count) * 2 + 1; + return DefaultArgumentMismatch - System.Math.Abs (param_count - arg_count); var dep = candidate.GetMissingDependencies (); if (dep != null) { @@ -4879,7 +4982,7 @@ namespace Mono.CSharp { if (type_arguments != null) { var g_args_count = ms.Arity; if (g_args_count != type_arguments.Count) - return int.MaxValue - 20000 + System.Math.Abs (type_arguments.Count - g_args_count); + return TypeArgumentsMismatch - System.Math.Abs (type_arguments.Count - g_args_count); if (type_arguments.Arguments != null) ms = ms.MakeGenericMethod (ec, type_arguments.Arguments); @@ -4911,7 +5014,7 @@ namespace Mono.CSharp { TypeSpec[] i_args = ti.InferMethodArguments (ec, ms); if (i_args == null) - return ti.InferenceScore - 20000; + return TypeArgumentsMismatch - ti.InferenceScore; // // Clear any error messages when the result was success @@ -4921,9 +5024,10 @@ namespace Mono.CSharp { if (i_args.Length != 0) { if (!errorMode) { - foreach (var ta in i_args) { + for (int i = 0; i < i_args.Length; ++i) { + var ta = i_args [i]; if (!ta.IsAccessible (ec)) - return ti.InferenceScore - 10000; + return TypeArgumentsMismatch - i; } } @@ -4936,7 +5040,7 @@ namespace Mono.CSharp { // if (!CheckInflatedArguments (ms)) { candidate = ms; - return int.MaxValue - 25000; + return InflatedTypesMismatch; } // @@ -4959,7 +5063,7 @@ namespace Mono.CSharp { ptypes = pd.Types; } else { if (type_arguments != null) - return int.MaxValue - 15000; + return UnexpectedTypeArguments; ptypes = cpd.Types; } @@ -5025,15 +5129,7 @@ namespace Mono.CSharp { score = 1; if (!params_expanded_form) { if (a.IsExtensionType) { - // - // Indentity, implicit reference or boxing conversion must exist for the extension parameter - // - // LAMESPEC: or implicit type parameter conversion - // - var at = a.Type; - if (at == pt || TypeSpecComparer.IsEqual (at, pt) || - Convert.ImplicitReferenceConversionExists (at, pt, false) || - Convert.ImplicitBoxingConversion (null, at, pt) != null) { + if (ExtensionMethodGroupExpr.IsExtensionTypeCompatible (a.Type, pt)) { score = 0; continue; } @@ -5120,31 +5216,36 @@ namespace Mono.CSharp { // is used and argument is not of dynamic type // if (((argument.Modifier | param_mod) & Parameter.Modifier.RefOutMask) != 0) { - if (argument.Type != parameter) { + var arg_type = argument.Type; + + if ((argument.Modifier & Parameter.Modifier.RefOutMask) != (param_mod & Parameter.Modifier.RefOutMask)) { + // + // Using dynamic for ref/out parameter can still succeed at runtime + // + if (arg_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic && (argument.Modifier & Parameter.Modifier.RefOutMask) == 0 && (restrictions & Restrictions.CovariantDelegate) == 0) + return -1; + + return 1; + } + + if (arg_type != parameter) { + if (arg_type == InternalType.VarOutType) + return 0; + // // Do full equality check after quick path // - if (!TypeSpecComparer.IsEqual (argument.Type, parameter)) { + if (!TypeSpecComparer.IsEqual (arg_type, parameter)) { // // Using dynamic for ref/out parameter can still succeed at runtime // - if (argument.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic && (argument.Modifier & Parameter.Modifier.RefOutMask) == 0 && (restrictions & Restrictions.CovariantDelegate) == 0) + if (arg_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic && (argument.Modifier & Parameter.Modifier.RefOutMask) == 0 && (restrictions & Restrictions.CovariantDelegate) == 0) return -1; return 2; } } - if ((argument.Modifier & Parameter.Modifier.RefOutMask) != (param_mod & Parameter.Modifier.RefOutMask)) { - // - // Using dynamic for ref/out parameter can still succeed at runtime - // - if (argument.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic && (argument.Modifier & Parameter.Modifier.RefOutMask) == 0 && (restrictions & Restrictions.CovariantDelegate) == 0) - return -1; - - return 1; - } - } else { if (argument.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic && (restrictions & Restrictions.CovariantDelegate) == 0) return -1; @@ -5717,10 +5818,20 @@ namespace Mono.CSharp { if ((a.Modifier & Parameter.Modifier.RefOutMask) != (p_mod & Parameter.Modifier.RefOutMask)) break; - if (a.Expr.Type == pt || TypeSpecComparer.IsEqual (a.Expr.Type, pt)) + var arg_type = a.Type; + if (arg_type == pt) continue; - break; + if (arg_type == InternalType.VarOutType) { + // + // Set underlying variable type based on parameter type + // + ((DeclarationExpression)a.Expr).Variable.Type = pt; + continue; + } + + if (!TypeSpecComparer.IsEqual (arg_type, pt)) + break; } NamedArgument na = a as NamedArgument; @@ -5754,7 +5865,14 @@ namespace Mono.CSharp { continue; if ((restrictions & Restrictions.CovariantDelegate) != 0 && !Delegate.IsTypeCovariant (ec, a.Expr.Type, pt)) { - custom_errors.NoArgumentMatch (ec, member); + if (a.IsExtensionType) { + // TODO: Should report better message type, something similar to CS1928/1929 instead of + // CS1061 but that still better than confusing CS0123 + var ma = new MemberAccess (a.Expr, member.Name, loc); + ma.Error_TypeDoesNotContainDefinition (ec, a.Expr.Type, ma.Name); + } else { + custom_errors.NoArgumentMatch (ec, member); + } return false; } @@ -5792,6 +5910,20 @@ namespace Mono.CSharp { } if (a_idx != arg_count) { + // + // Convert all var out argument to error type for less confusing error reporting + // when no matching overload is found + // + for (; a_idx < arg_count; a_idx++) { + var arg = args [a_idx]; + if (arg == null) + continue; + + if (arg.Type == InternalType.VarOutType) { + ((DeclarationExpression)arg.Expr).Variable.Type = InternalType.ErrorType; + } + } + ReportArgumentMismatch (ec, a_pos, member, a, pd, pt); return false; } @@ -6525,6 +6657,7 @@ namespace Mono.CSharp { sealed class PropertyExpr : PropertyOrIndexerExpr<PropertySpec> { Arguments arguments; + FieldExpr backing_field; public PropertyExpr (PropertySpec spec, Location l) : base (l) @@ -6556,6 +6689,13 @@ namespace Mono.CSharp { } } + public bool IsAutoPropertyAccess { + get { + var prop = best_candidate.MemberDefinition as Property; + return prop != null && prop.BackingField != null; + } + } + public override bool IsInstance { get { return !IsStatic; @@ -6697,6 +6837,11 @@ namespace Mono.CSharp { public override void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) { + if (backing_field != null) { + backing_field.EmitAssign (ec, source, false, false); + return; + } + Arguments args; LocalTemporary await_source_arg = null; @@ -6766,6 +6911,21 @@ namespace Mono.CSharp { public override void FlowAnalysis (FlowAnalysisContext fc) { + var prop = best_candidate.MemberDefinition as Property; + if (prop != null && prop.BackingField != null) { + var var = InstanceExpression as IVariableReference; + if (var != null) { + var vi = var.VariableInfo; + if (vi != null && !fc.IsStructFieldDefinitelyAssigned (vi, prop.BackingField.Name)) { + fc.Report.Error (8079, loc, "Use of possibly unassigned auto-implemented property `{0}'", Name); + return; + } + + if (TypeSpec.IsValueType (InstanceExpression.Type) && InstanceExpression is VariableReference) + return; + } + } + base.FlowAnalysis (fc); if (conditional_access_receiver) @@ -6810,6 +6970,52 @@ namespace Mono.CSharp { return this; } + protected override bool ResolveAutopropertyAssignment (ResolveContext rc, Expression rhs) + { + var prop = best_candidate.MemberDefinition as Property; + if (prop == null) + return false; + + if (!rc.HasSet (ResolveContext.Options.ConstructorScope)) + return false; + + var spec = prop.BackingField; + if (spec == null) + return false; + + if (rc.IsStatic != spec.IsStatic) + return false; + + if (!spec.IsStatic && (!(InstanceExpression is This) || InstanceExpression is BaseThis)) + return false; + + backing_field = new FieldExpr (prop.BackingField, loc); + backing_field.ResolveLValue (rc, rhs); + return true; + } + + public void SetBackingFieldAssigned (FlowAnalysisContext fc) + { + if (backing_field != null) { + backing_field.SetFieldAssigned (fc); + return; + } + + if (!IsAutoPropertyAccess) + return; + + var prop = best_candidate.MemberDefinition as Property; + if (prop != null && prop.BackingField != null) { + bool lvalue_instance = best_candidate.DeclaringType.IsStruct; + if (lvalue_instance) { + var var = InstanceExpression as IVariableReference; + if (var != null && var.VariableInfo != null) { + fc.SetStructFieldAssigned (var.VariableInfo, prop.BackingField.Name); + } + } + } + } + public override void SetTypeArguments (ResolveContext ec, TypeArguments ta) { Error_TypeArgumentsCannotBeUsed (ec, "property", GetSignatureForError (), loc); @@ -6879,7 +7085,7 @@ namespace Mono.CSharp { return this; } - public override Expression DoResolveLValue (ResolveContext ec, Expression right_side) + public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) { if (ConditionalAccess) throw new NotSupportedException ("null propagating operator assignment"); @@ -6887,29 +7093,50 @@ namespace Mono.CSharp { if (right_side == EmptyExpression.OutAccess) { // TODO: best_candidate can be null at this point INamedBlockVariable variable = null; - if (best_candidate != null && ec.CurrentBlock.ParametersBlock.TopBlock.GetLocalName (best_candidate.Name, ec.CurrentBlock, ref variable) && variable is Linq.RangeVariable) { - ec.Report.Error (1939, loc, "A range variable `{0}' may not be passes as `ref' or `out' parameter", + if (best_candidate != null && rc.CurrentBlock.ParametersBlock.TopBlock.GetLocalName (best_candidate.Name, rc.CurrentBlock, ref variable) && variable is Linq.RangeVariable) { + rc.Report.Error (1939, loc, "A range variable `{0}' may not be passes as `ref' or `out' parameter", best_candidate.Name); } else { - right_side.DoResolveLValue (ec, this); + right_side.DoResolveLValue (rc, this); } return null; } if (eclass == ExprClass.Unresolved) { - var expr = OverloadResolve (ec, right_side); + var expr = OverloadResolve (rc, right_side); if (expr == null) return null; if (expr != this) - return expr.ResolveLValue (ec, right_side); + return expr.ResolveLValue (rc, right_side); } else { - ResolveInstanceExpression (ec, right_side); + ResolveInstanceExpression (rc, right_side); } - if (!ResolveSetter (ec)) + if (!best_candidate.HasSet) { + if (ResolveAutopropertyAssignment (rc, right_side)) + return this; + + rc.Report.Error (200, loc, "Property or indexer `{0}' cannot be assigned to (it is read-only)", + GetSignatureForError ()); return null; + } + if (!best_candidate.Set.IsAccessible (rc) || !best_candidate.Set.DeclaringType.IsAccessible (rc)) { + if (best_candidate.HasDifferentAccessibility) { + rc.Report.SymbolRelatedToPreviousError (best_candidate.Set); + rc.Report.Error (272, loc, "The property or indexer `{0}' cannot be used in this context because the set accessor is inaccessible", + GetSignatureForError ()); + } else { + rc.Report.SymbolRelatedToPreviousError (best_candidate.Set); + ErrorIsInaccesible (rc, best_candidate.GetSignatureForError (), loc); + } + } + + if (best_candidate.HasDifferentAccessibility) + CheckProtectedMemberAccess (rc, best_candidate.Set); + + setter = CandidateToBaseOverride (rc, best_candidate.Set); return this; } @@ -6999,30 +7226,9 @@ namespace Mono.CSharp { return true; } - bool ResolveSetter (ResolveContext rc) + protected virtual bool ResolveAutopropertyAssignment (ResolveContext rc, Expression rhs) { - if (!best_candidate.HasSet) { - rc.Report.Error (200, loc, "Property or indexer `{0}' cannot be assigned to (it is read-only)", - GetSignatureForError ()); - return false; - } - - if (!best_candidate.Set.IsAccessible (rc) || !best_candidate.Set.DeclaringType.IsAccessible (rc)) { - if (best_candidate.HasDifferentAccessibility) { - rc.Report.SymbolRelatedToPreviousError (best_candidate.Set); - rc.Report.Error (272, loc, "The property or indexer `{0}' cannot be used in this context because the set accessor is inaccessible", - GetSignatureForError ()); - } else { - rc.Report.SymbolRelatedToPreviousError (best_candidate.Set); - ErrorIsInaccesible (rc, best_candidate.GetSignatureForError (), loc); - } - } - - if (best_candidate.HasDifferentAccessibility) - CheckProtectedMemberAccess (rc, best_candidate.Set); - - setter = CandidateToBaseOverride (rc, best_candidate.Set); - return true; + return false; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs index aac77eee..af6bb33b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs @@ -860,13 +860,19 @@ namespace Mono.CSharp public string GetUsing () { + if (source_file == null || source_file.Usings == null) + return string.Empty; + StringBuilder sb = new StringBuilder (); // TODO: //foreach (object x in ns.using_alias_list) // sb.AppendFormat ("using {0};\n", x); foreach (var ue in source_file.Usings) { - sb.AppendFormat ("using {0};", ue.ToString ()); + if (ue.Alias != null || ue.ResolvedExpression == null) + continue; + + sb.AppendFormat("using {0};", ue.ToString ()); sb.Append (Environment.NewLine); } @@ -877,7 +883,11 @@ namespace Mono.CSharp { var res = new List<string> (); - foreach (var ue in source_file.Usings) { + if (source_file == null || source_file.Usings == null) + return res; + + foreach (var ue in source_file.Usings) + { if (ue.Alias != null || ue.ResolvedExpression == null) continue; @@ -1274,7 +1284,7 @@ namespace Mono.CSharp if (current_container.Containers != null) { - var existing = current_container.Containers.FirstOrDefault (l => l.Basename == tc.Basename); + var existing = current_container.Containers.FirstOrDefault (l => l.MemberName.Basename == tc.MemberName.Basename); if (existing != null) { current_container.RemoveContainer (existing); undo_actions.Add (() => current_container.AddTypeContainer (existing)); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs index 3a076077..821efe63 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs @@ -14,6 +14,7 @@ using System; using System.Collections.Generic; using System.Linq; using SLE = System.Linq.Expressions; +using System.Text; #if STATIC using MetaType = IKVM.Reflection.Type; @@ -1541,7 +1542,12 @@ namespace Mono.CSharp public override void Emit (EmitContext ec) { if (probe_type_expr == null) { - EmitConstantMatch (ec); + if (ProbeType is WildcardPattern) { + expr.EmitSideEffect (ec); + ProbeType.Emit (ec); + } else { + EmitPatternMatch (ec); + } return; } @@ -1556,7 +1562,7 @@ namespace Mono.CSharp public override void EmitBranchable (EmitContext ec, Label target, bool on_true) { if (probe_type_expr == null) { - EmitConstantMatch (ec); + EmitPatternMatch (ec); } else { EmitLoad (ec); } @@ -1564,7 +1570,7 @@ namespace Mono.CSharp ec.Emit (on_true ? OpCodes.Brtrue : OpCodes.Brfalse, target); } - void EmitConstantMatch (EmitContext ec) + void EmitPatternMatch (EmitContext ec) { var no_match = ec.DefineLabel (); var end = ec.DefineLabel (); @@ -1595,22 +1601,42 @@ namespace Mono.CSharp return; } + var probe_type = ProbeType.Type; + Expr.Emit (ec); - ec.Emit (OpCodes.Isinst, ProbeType.Type); + ec.Emit (OpCodes.Isinst, probe_type); ec.Emit (OpCodes.Dup); ec.Emit (OpCodes.Brfalse, no_match); + bool complex_pattern = ProbeType is ComplexPatternExpression; + Label prev = ec.RecursivePatternLabel; + if (complex_pattern) + ec.RecursivePatternLabel = ec.DefineLabel (); + if (number_mg != null) { var ce = new CallEmitter (); ce.Emit (ec, number_mg, number_args, loc); } else { + if (TypeSpec.IsValueType (probe_type)) + ec.Emit (OpCodes.Unbox_Any, probe_type); + ProbeType.Emit (ec); - ec.Emit (OpCodes.Ceq); + if (complex_pattern) { + ec.EmitInt (1); + } else { + ec.Emit (OpCodes.Ceq); + } } ec.Emit (OpCodes.Br_S, end); ec.MarkLabel (no_match); ec.Emit (OpCodes.Pop); + + if (complex_pattern) + ec.MarkLabel (ec.RecursivePatternLabel); + + ec.RecursivePatternLabel = prev; + ec.EmitInt (0); ec.MarkLabel (end); } @@ -1696,14 +1722,48 @@ namespace Mono.CSharp protected override void ResolveProbeType (ResolveContext rc) { if (!(ProbeType is TypeExpr) && rc.Module.Compiler.Settings.Version == LanguageVersion.Experimental) { - ProbeType = ProbeType.Resolve (rc, ResolveFlags.VariableOrValue | ResolveFlags.MethodGroup | ResolveFlags.Type); - if (ProbeType == null) + if (ProbeType is PatternExpression) { + ProbeType.Resolve (rc); + return; + } + + // + // Have to use session recording because we don't have reliable type probing + // mechanism (similar issue as in attributes resolving) + // + // TODO: This is still wrong because ResolveAsType can be destructive + // + var type_printer = new SessionReportPrinter (); + var prev_recorder = rc.Report.SetPrinter (type_printer); + + probe_type_expr = ProbeType.ResolveAsType (rc); + type_printer.EndSession (); + + if (probe_type_expr != null) { + type_printer.Merge (rc.Report.Printer); + rc.Report.SetPrinter (prev_recorder); + return; + } + + var vexpr = ProbeType as VarExpr; + if (vexpr != null && vexpr.InferType (rc, expr)) { + probe_type_expr = vexpr.Type; + rc.Report.SetPrinter (prev_recorder); return; + } + + var expr_printer = new SessionReportPrinter (); + rc.Report.SetPrinter (expr_printer); + ProbeType = ProbeType.Resolve (rc); + expr_printer.EndSession (); - if (ProbeType.eclass == ExprClass.Type) { - probe_type_expr = ProbeType.Type; + if (ProbeType != null) { + expr_printer.Merge (rc.Report.Printer); + } else { + type_printer.Merge (rc.Report.Printer); } + rc.Report.SetPrinter (prev_recorder); return; } @@ -1732,6 +1792,10 @@ namespace Mono.CSharp if (Expr.Type.IsNullableType) { expr_unwrap = new Nullable.Unwrap (Expr); expr_unwrap.Resolve (rc); + ProbeType = Convert.ImplicitConversion (rc, ProbeType, expr_unwrap.Type, loc); + } else if (ProbeType.Type == Expr.Type) { + // TODO: Better error handling + return new Binary (Binary.Operator.Equality, Expr, mc, loc).Resolve (rc); } else if (ProbeType.Type.IsEnum || (ProbeType.Type.BuiltinType >= BuiltinTypeSpec.Type.Byte && ProbeType.Type.BuiltinType <= BuiltinTypeSpec.Type.Decimal)) { var helper = rc.Module.CreatePatterMatchingHelper (); number_mg = helper.NumberMatcher.Spec; @@ -1750,7 +1814,17 @@ namespace Mono.CSharp return this; } - throw new NotImplementedException (); + if (ProbeType is PatternExpression) { + if (!(ProbeType is WildcardPattern) && !Convert.ImplicitConversionExists (rc, ProbeType, Expr.Type)) { + ProbeType.Error_ValueCannotBeConverted (rc, Expr.Type, false); + } + + return this; + } + + // TODO: Better error message + rc.Report.Error (150, ProbeType.Location, "A constant value is expected"); + return this; } Expression ResolveResultExpression (ResolveContext ec) @@ -1899,6 +1973,339 @@ namespace Mono.CSharp } } + class WildcardPattern : PatternExpression + { + public WildcardPattern (Location loc) + : base (loc) + { + } + + protected override Expression DoResolve (ResolveContext rc) + { + eclass = ExprClass.Value; + type = rc.BuiltinTypes.Object; + return this; + } + + public override void Emit (EmitContext ec) + { + ec.EmitInt (1); + } + } + + class RecursivePattern : ComplexPatternExpression + { + MethodGroupExpr operator_mg; + Arguments operator_args; + + public RecursivePattern (ATypeNameExpression typeExpresion, Arguments arguments, Location loc) + : base (typeExpresion, loc) + { + Arguments = arguments; + } + + public Arguments Arguments { get; private set; } + + protected override Expression DoResolve (ResolveContext rc) + { + type = TypeExpression.ResolveAsType (rc); + if (type == null) + return null; + + var operators = MemberCache.GetUserOperator (type, Operator.OpType.Is, true); + if (operators == null) { + Error_TypeDoesNotContainDefinition (rc, type, Operator.GetName (Operator.OpType.Is) + " operator"); + return null; + } + + var ops = FindMatchingOverloads (operators); + if (ops == null) { + // TODO: better error message + Error_TypeDoesNotContainDefinition (rc, type, Operator.GetName (Operator.OpType.Is) + " operator"); + return null; + } + + bool dynamic_args; + Arguments.Resolve (rc, out dynamic_args); + if (dynamic_args) + throw new NotImplementedException ("dynamic argument"); + + var op = FindBestOverload (rc, ops); + if (op == null) { + // TODO: better error message + Error_TypeDoesNotContainDefinition (rc, type, Operator.GetName (Operator.OpType.Is) + " operator"); + return null; + } + + var op_types = op.Parameters.Types; + operator_args = new Arguments (op_types.Length); + operator_args.Add (new Argument (new EmptyExpression (type))); + + for (int i = 0; i < Arguments.Count; ++i) { + // TODO: Needs releasing optimization + var lt = new LocalTemporary (op_types [i + 1]); + operator_args.Add (new Argument (lt, Argument.AType.Out)); + + if (comparisons == null) + comparisons = new Expression[Arguments.Count]; + + int arg_comp_index; + Expression expr; + + var arg = Arguments [i]; + var named = arg as NamedArgument; + if (named != null) { + arg_comp_index = op.Parameters.GetParameterIndexByName (named.Name) - 1; + expr = Arguments [arg_comp_index].Expr; + } else { + arg_comp_index = i; + expr = arg.Expr; + } + + comparisons [arg_comp_index] = ResolveComparison (rc, expr, lt); + } + + operator_mg = MethodGroupExpr.CreatePredefined (op, type, loc); + + eclass = ExprClass.Value; + return this; + } + + List<MethodSpec> FindMatchingOverloads (IList<MemberSpec> members) + { + int arg_count = Arguments.Count + 1; + List<MethodSpec> best = null; + foreach (MethodSpec method in members) { + var pm = method.Parameters; + if (pm.Count != arg_count) + continue; + + // TODO: Needs more thorough operator checks elsewhere to avoid doing this every time + bool ok = true; + for (int ii = 1; ii < pm.Count; ++ii) { + if ((pm.FixedParameters [ii].ModFlags & Parameter.Modifier.OUT) == 0) { + ok = false; + break; + } + } + + if (!ok) + continue; + + if (best == null) + best = new List<MethodSpec> (); + + best.Add (method); + } + + return best; + } + + MethodSpec FindBestOverload (ResolveContext rc, List<MethodSpec> methods) + { + for (int ii = 0; ii < Arguments.Count; ++ii) { + var arg = Arguments [ii]; + var expr = arg.Expr; + if (expr is WildcardPattern) + continue; + + var na = arg as NamedArgument; + for (int i = 0; i < methods.Count; ++i) { + var pd = methods [i].Parameters; + + int index; + if (na != null) { + index = pd.GetParameterIndexByName (na.Name); + if (index < 1) { + methods.RemoveAt (i--); + continue; + } + } else { + index = ii + 1; + } + + var m = pd.Types [index]; + if (!Convert.ImplicitConversionExists (rc, expr, m)) + methods.RemoveAt (i--); + } + } + + if (methods.Count != 1) + return null; + + return methods [0]; + } + + public override void EmitBranchable (EmitContext ec, Label target, bool on_true) + { + operator_mg.EmitCall (ec, operator_args, false); + ec.Emit (OpCodes.Brfalse, target); + + base.EmitBranchable (ec, target, on_true); + } + + static Expression ResolveComparison (ResolveContext rc, Expression expr, LocalTemporary lt) + { + if (expr is WildcardPattern) + return new EmptyExpression (expr.Type); + + var recursive = expr as RecursivePattern; + expr = Convert.ImplicitConversionRequired (rc, expr, lt.Type, expr.Location); + if (expr == null) + return null; + + if (recursive != null) { + recursive.SetParentInstance (lt); + return expr; + } + + // TODO: Better error handling + return new Binary (Binary.Operator.Equality, lt, expr, expr.Location).Resolve (rc); + } + + public void SetParentInstance (Expression instance) + { + operator_args [0] = new Argument (instance); + } + } + + class PropertyPattern : ComplexPatternExpression + { + LocalTemporary instance; + + public PropertyPattern (ATypeNameExpression typeExpresion, List<PropertyPatternMember> members, Location loc) + : base (typeExpresion, loc) + { + Members = members; + } + + public List<PropertyPatternMember> Members { get; private set; } + + protected override Expression DoResolve (ResolveContext rc) + { + type = TypeExpression.ResolveAsType (rc); + if (type == null) + return null; + + comparisons = new Expression[Members.Count]; + + // TODO: optimize when source is VariableReference, it'd save dup+pop + instance = new LocalTemporary (type); + + for (int i = 0; i < Members.Count; i++) { + var lookup = Members [i]; + + var member = MemberLookup (rc, false, type, lookup.Name, 0, Expression.MemberLookupRestrictions.ExactArity, loc); + if (member == null) { + member = MemberLookup (rc, true, type, lookup.Name, 0, Expression.MemberLookupRestrictions.ExactArity, loc); + if (member != null) { + Expression.ErrorIsInaccesible (rc, member.GetSignatureForError (), loc); + continue; + } + } + + if (member == null) { + Expression.Error_TypeDoesNotContainDefinition (rc, Location, Type, lookup.Name); + continue; + } + + var pe = member as PropertyExpr; + if (pe == null || member is FieldExpr) { + rc.Report.Error (-2001, lookup.Location, "`{0}' is not a valid pattern member", lookup.Name); + continue; + } + + // TODO: Obsolete checks + // TODO: check accessibility + if (pe != null && !pe.PropertyInfo.HasGet) { + rc.Report.Error (-2002, lookup.Location, "Property `{0}.get' accessor is required", pe.GetSignatureForError ()); + continue; + } + + var expr = lookup.Expr.Resolve (rc); + if (expr == null) + continue; + + var me = (MemberExpr)member; + me.InstanceExpression = instance; + + comparisons [i] = ResolveComparison (rc, expr, me); + } + + eclass = ExprClass.Value; + return this; + } + + static Expression ResolveComparison (ResolveContext rc, Expression expr, Expression instance) + { + if (expr is WildcardPattern) + return new EmptyExpression (expr.Type); + + return new Is (instance, expr, expr.Location).Resolve (rc); + } + + public override void EmitBranchable (EmitContext ec, Label target, bool on_true) + { + instance.Store (ec); + + base.EmitBranchable (ec, target, on_true); + } + } + + class PropertyPatternMember + { + public PropertyPatternMember (string name, Expression expr, Location loc) + { + Name = name; + Expr = expr; + Location = loc; + } + + public string Name { get; private set; } + public Expression Expr { get; private set; } + public Location Location { get; private set; } + } + + abstract class PatternExpression : Expression + { + protected PatternExpression (Location loc) + { + this.loc = loc; + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotImplementedException (); + } + } + + abstract class ComplexPatternExpression : PatternExpression + { + protected Expression[] comparisons; + + protected ComplexPatternExpression (ATypeNameExpression typeExpresion, Location loc) + : base (loc) + { + TypeExpression = typeExpresion; + } + + public ATypeNameExpression TypeExpression { get; private set; } + + public override void Emit (EmitContext ec) + { + EmitBranchable (ec, ec.RecursivePatternLabel, false); + } + + public override void EmitBranchable (EmitContext ec, Label target, bool on_true) + { + if (comparisons != null) { + foreach (var comp in comparisons) { + comp.EmitBranchable (ec, target, false); + } + } + } + } + /// <summary> /// Implementation of the `as' operator. /// </summary> @@ -2087,6 +2494,96 @@ namespace Mono.CSharp return expr; } } + + public class DeclarationExpression : Expression, IMemoryLocation + { + LocalVariableReference lvr; + + public DeclarationExpression (FullNamedExpression variableType, LocalVariable variable) + { + VariableType = variableType; + Variable = variable; + this.loc = variable.Location; + } + + public LocalVariable Variable { get; set; } + public Expression Initializer { get; set; } + public FullNamedExpression VariableType { get; set; } + + public void AddressOf (EmitContext ec, AddressOp mode) + { + Variable.CreateBuilder (ec); + + if (Initializer != null) { + lvr.EmitAssign (ec, Initializer, false, false); + } + + lvr.AddressOf (ec, mode); + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + var target = (DeclarationExpression) t; + + target.VariableType = (FullNamedExpression) VariableType.Clone (clonectx); + + if (Initializer != null) + target.Initializer = Initializer.Clone (clonectx); + } + + public override Expression CreateExpressionTree (ResolveContext rc) + { + rc.Report.Error (8046, loc, "An expression tree cannot contain a declaration expression"); + return null; + } + + bool DoResolveCommon (ResolveContext rc) + { + var var_expr = VariableType as VarExpr; + if (var_expr != null) { + type = InternalType.VarOutType; + } else { + type = VariableType.ResolveAsType (rc); + if (type == null) + return false; + } + + if (Initializer != null) { + Initializer = Initializer.Resolve (rc); + + if (var_expr != null && Initializer != null && var_expr.InferType (rc, Initializer)) { + type = var_expr.Type; + } + } + + Variable.Type = type; + lvr = new LocalVariableReference (Variable, loc); + + eclass = ExprClass.Variable; + return true; + } + + protected override Expression DoResolve (ResolveContext rc) + { + if (DoResolveCommon (rc)) + lvr.Resolve (rc); + + return this; + } + + public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) + { + if (lvr == null && DoResolveCommon (rc)) + lvr.ResolveLValue (rc, right_side); + + return this; + } + + public override void Emit (EmitContext ec) + { + throw new NotImplementedException (); + } + } // // C# 2.0 Default value expression @@ -2683,11 +3180,16 @@ namespace Mono.CSharp } public Binary (Operator oper, Expression left, Expression right) + : this (oper, left, right, left.Location) + { + } + + public Binary (Operator oper, Expression left, Expression right, Location loc) { this.oper = oper; this.left = left; this.right = right; - this.loc = left.Location; + this.loc = loc; } #region Properties @@ -4100,7 +4602,15 @@ namespace Mono.CSharp return expr; } - enum_type = rc.Module.PredefinedTypes.Nullable.TypeSpec.MakeGenericType (rc.Module, new[] { enum_type }); + var nullable = rc.Module.PredefinedTypes.Nullable; + + // + // Don't try nullable version when nullable type is undefined + // + if (!nullable.IsDefined) + return null; + + enum_type = nullable.TypeSpec.MakeGenericType (rc.Module, new[] { enum_type }); } expr = ResolveOperatorPredefined (rc, rc.Module.GetPredefinedEnumAritmeticOperators (enum_type, true), false); @@ -5703,9 +6213,11 @@ namespace Mono.CSharp } else if ((conv = Convert.ImplicitConversion (ec, false_expr, true_type, loc)) != null) { false_expr = conv; } else { - ec.Report.Error (173, true_expr.Location, - "Type of conditional expression cannot be determined because there is no implicit conversion between `{0}' and `{1}'", - true_type.GetSignatureForError (), false_type.GetSignatureForError ()); + if (false_type != InternalType.ErrorType) { + ec.Report.Error (173, true_expr.Location, + "Type of conditional expression cannot be determined because there is no implicit conversion between `{0}' and `{1}'", + true_type.GetSignatureForError (), false_type.GetSignatureForError ()); + } return null; } } @@ -5762,11 +6274,11 @@ namespace Mono.CSharp var expr_true = fc.DefiniteAssignmentOnTrue; var expr_false = fc.DefiniteAssignmentOnFalse; - fc.DefiniteAssignment = new DefiniteAssignmentBitSet (expr_true); + fc.BranchDefiniteAssignment (expr_true); true_expr.FlowAnalysis (fc); var true_fc = fc.DefiniteAssignment; - fc.DefiniteAssignment = new DefiniteAssignmentBitSet (expr_false); + fc.BranchDefiniteAssignment (expr_false); false_expr.FlowAnalysis (fc); fc.DefiniteAssignment &= true_fc; @@ -6066,6 +6578,9 @@ namespace Mono.CSharp void DoResolveBase (ResolveContext ec) { + eclass = ExprClass.Variable; + type = local_info.Type; + // // If we are referencing a variable from the external block // flag it for capturing @@ -6084,9 +6599,6 @@ namespace Mono.CSharp storey.CaptureLocalVariable (ec, local_info); } } - - eclass = ExprClass.Variable; - type = local_info.Type; } protected override Expression DoResolve (ResolveContext ec) @@ -6094,6 +6606,14 @@ namespace Mono.CSharp local_info.SetIsUsed (); DoResolveBase (ec); + + if (local_info.Type == InternalType.VarOutType) { + ec.Report.Error (8048, loc, "Cannot use uninitialized variable `{0}'", + GetSignatureForError ()); + + type = InternalType.ErrorType; + } + return this; } @@ -6782,11 +7302,11 @@ namespace Mono.CSharp } // - // Returns true for resolved `new S()' + // Returns true for resolved `new S()' when S does not declare parameterless constructor // - public bool IsDefaultStruct { + public bool IsGeneratedStructConstructor { get { - return arguments == null && type.IsStruct && GetType () == typeof (New); + return arguments == null && method == null && type.IsStruct && GetType () == typeof (New); } } @@ -6946,12 +7466,6 @@ namespace Mono.CSharp return null; } - // - // Any struct always defines parameterless constructor - // - if (type.IsStruct && arguments == null) - return this; - bool dynamic; if (arguments != null) { arguments.Resolve (ec, out dynamic); @@ -6969,46 +7483,14 @@ namespace Mono.CSharp return this; } - bool DoEmitTypeParameter (EmitContext ec) + void DoEmitTypeParameter (EmitContext ec) { var m = ec.Module.PredefinedMembers.ActivatorCreateInstance.Resolve (loc); if (m == null) - return true; + return; var ctor_factory = m.MakeGenericMethod (ec.MemberContext, type); - var tparam = (TypeParameterSpec) type; - - if (tparam.IsReferenceType) { - ec.Emit (OpCodes.Call, ctor_factory); - return true; - } - - // Allow DoEmit() to be called multiple times. - // We need to create a new LocalTemporary each time since - // you can't share LocalBuilders among ILGeneators. - LocalTemporary temp = new LocalTemporary (type); - - Label label_activator = ec.DefineLabel (); - Label label_end = ec.DefineLabel (); - - temp.AddressOf (ec, AddressOp.Store); - ec.Emit (OpCodes.Initobj, type); - - temp.Emit (ec); - ec.Emit (OpCodes.Box, type); - ec.Emit (OpCodes.Brfalse, label_activator); - - temp.AddressOf (ec, AddressOp.Store); - ec.Emit (OpCodes.Initobj, type); - temp.Emit (ec); - temp.Release (ec); - ec.Emit (OpCodes.Br_S, label_end); - - ec.MarkLabel (label_activator); - ec.Emit (OpCodes.Call, ctor_factory); - ec.MarkLabel (label_end); - return true; } // @@ -7040,7 +7522,7 @@ namespace Mono.CSharp // public virtual bool Emit (EmitContext ec, IMemoryLocation target) { - bool is_value_type = TypeSpec.IsValueType (type); + bool is_value_type = type.IsStructOrEnum; VariableReference vr = target as VariableReference; if (target != null && is_value_type && (vr != null || method == null)) { @@ -7069,8 +7551,10 @@ namespace Mono.CSharp } } - if (type is TypeParameterSpec) - return DoEmitTypeParameter (ec); + if (type is TypeParameterSpec) { + DoEmitTypeParameter (ec); + return true; + } ec.MarkCallEntry (loc); ec.Emit (OpCodes.Newobj, method); @@ -7080,7 +7564,7 @@ namespace Mono.CSharp public override void Emit (EmitContext ec) { LocalTemporary v = null; - if (method == null && TypeSpec.IsValueType (type)) { + if (method == null && type.IsStructOrEnum) { // TODO: Use temporary variable from pool v = new LocalTemporary (type); } @@ -8461,7 +8945,7 @@ namespace Mono.CSharp } } - public class RefValueExpr : ShimExpression, IAssignMethod + public class RefValueExpr : ShimExpression, IAssignMethod, IMemoryLocation { FullNamedExpression texpr; @@ -8487,6 +8971,12 @@ namespace Mono.CSharp return false; } + public void AddressOf (EmitContext ec, AddressOp mode) + { + expr.Emit (ec); + ec.Emit (OpCodes.Refanyval, type); + } + protected override Expression DoResolve (ResolveContext rc) { expr = expr.Resolve (rc); @@ -8495,7 +8985,7 @@ namespace Mono.CSharp return null; expr = Convert.ImplicitConversionRequired (rc, expr, rc.Module.PredefinedTypes.TypedReference.Resolve (), loc); - eclass = ExprClass.Value; + eclass = ExprClass.Variable; return this; } @@ -9200,12 +9690,16 @@ namespace Mono.CSharp var retval = ns.LookupTypeOrNamespace (rc, Name, Arity, LookupMode.Normal, loc); if (retval == null) { - ns.Error_NamespaceDoesNotExist (rc, Name, Arity); + ns.Error_NamespaceDoesNotExist (rc, Name, Arity, loc); return null; } - if (HasTypeArguments) - return new GenericTypeExpr (retval.Type, targs, loc); + if (Arity > 0) { + if (HasTypeArguments) + return new GenericTypeExpr (retval.Type, targs, loc); + + targs.Resolve (rc, false); + } return retval; } @@ -9250,11 +9744,11 @@ namespace Mono.CSharp // Try to look for extension method when member lookup failed // if (MethodGroupExpr.IsExtensionMethodArgument (expr)) { - var methods = rc.LookupExtensionMethod (expr_type, Name, lookup_arity); + var methods = rc.LookupExtensionMethod (Name, lookup_arity); if (methods != null) { var emg = new ExtensionMethodGroupExpr (methods, expr, loc); if (HasTypeArguments) { - if (!targs.Resolve (rc)) + if (!targs.Resolve (rc, false)) return null; emg.SetTypeArguments (rc, targs); @@ -9333,7 +9827,7 @@ namespace Mono.CSharp me = me.ResolveMemberAccess (rc, expr, sn); if (Arity > 0) { - if (!targs.Resolve (rc)) + if (!targs.Resolve (rc, false)) return null; me.SetTypeArguments (rc, targs); @@ -9360,15 +9854,14 @@ namespace Mono.CSharp FullNamedExpression retval = ns.LookupTypeOrNamespace (rc, Name, Arity, LookupMode.Normal, loc); if (retval == null) { - ns.Error_NamespaceDoesNotExist (rc, Name, Arity); + ns.Error_NamespaceDoesNotExist (rc, Name, Arity, loc); } else if (Arity > 0) { if (HasTypeArguments) { retval = new GenericTypeExpr (retval.Type, targs, loc); if (retval.ResolveAsType (rc) == null) return null; } else { - if (!allowUnboundTypeArguments) - Error_OpenGenericTypeIsNotAllowed (rc); + targs.Resolve (rc, allowUnboundTypeArguments); retval = new GenericOpenTypeExpr (retval.Type, loc); } @@ -9429,8 +9922,7 @@ namespace Mono.CSharp if (HasTypeArguments) { texpr = new GenericTypeExpr (nested, targs, loc); } else { - if (!allowUnboundTypeArguments || expr_resolved is GenericTypeExpr) // && HasTypeArguments - Error_OpenGenericTypeIsNotAllowed (rc); + targs.Resolve (rc, allowUnboundTypeArguments && !(expr_resolved is GenericTypeExpr)); texpr = new GenericOpenTypeExpr (nested, loc); } @@ -9470,7 +9962,7 @@ namespace Mono.CSharp base.Error_InvalidExpressionStatement (report, LeftExpression.Location); } - protected override void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) + public override void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) { if (ec.Module.Compiler.Settings.Version > LanguageVersion.ISO_2 && !ec.IsRuntimeBinder && MethodGroupExpr.IsExtensionMethodArgument (expr)) { ec.Report.SymbolRelatedToPreviousError (type); @@ -9971,6 +10463,11 @@ namespace Mono.CSharp ea.FlowAnalysis (fc); } + public override bool HasConditionalAccess () + { + return ConditionalAccess || ea.Expr.HasConditionalAccess (); + } + // // Load the array arguments into the stack. // @@ -10552,6 +11049,10 @@ namespace Mono.CSharp // nothing, as we only exist to not do anything. } + public override void EmitBranchable (EmitContext ec, Label target, bool on_true) + { + } + public override void EmitSideEffect (EmitContext ec) { } @@ -10695,6 +11196,9 @@ namespace Mono.CSharp get { return source; } + set { + source = value; + } } public override bool ContainsEmitWithAwait () @@ -11250,7 +11754,7 @@ namespace Mono.CSharp { } - protected override void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) + public override void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) { if (TypeManager.HasElementType (type)) return; @@ -11335,6 +11839,11 @@ namespace Mono.CSharp var init = rc.CurrentInitializerVariable; var type = init.Type; + if (type.IsArray) { + target = new ArrayAccess (new ElementAccess (init, args, loc), loc); + return true; + } + var indexers = MemberCache.FindMembers (type, MemberCache.IndexerNameAlias, false); if (indexers == null && type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { ElementAccess.Error_CannotApplyIndexing (rc, type, loc); @@ -11918,4 +12427,178 @@ namespace Mono.CSharp this.loc = loc; } } + + public class InterpolatedString : Expression + { + readonly StringLiteral start, end; + readonly List<Expression> interpolations; + Arguments arguments; + + public InterpolatedString (StringLiteral start, List<Expression> interpolations, StringLiteral end) + { + this.start = start; + this.end = end; + this.interpolations = interpolations; + loc = start.Location; + } + + public Expression ConvertTo (ResolveContext rc, TypeSpec type) + { + var factory = rc.Module.PredefinedTypes.FormattableStringFactory.Resolve (); + if (factory == null) + return null; + + var ma = new MemberAccess (new TypeExpression (factory, loc), "Create", loc); + var res = new Invocation (ma, arguments).Resolve (rc); + if (res != null && res.Type != type) + res = Convert.ExplicitConversion (rc, res, type, loc); + + return res; + } + + public override bool ContainsEmitWithAwait () + { + if (interpolations == null) + return false; + + foreach (var expr in interpolations) { + if (expr.ContainsEmitWithAwait ()) + return true; + } + + return false; + } + + public override Expression CreateExpressionTree (ResolveContext rc) + { + var best = ResolveBestFormatOverload (rc); + if (best == null) + return null; + + Expression instance = new NullLiteral (loc); + var args = Arguments.CreateForExpressionTree (rc, arguments, instance, new TypeOfMethod (best, loc)); + return CreateExpressionFactoryCall (rc, "Call", args); + } + + protected override Expression DoResolve (ResolveContext rc) + { + string str; + + if (interpolations == null) { + str = start.Value; + arguments = new Arguments (1); + } else { + for (int i = 0; i < interpolations.Count; i += 2) { + var ipi = (InterpolatedStringInsert)interpolations [i]; + ipi.Resolve (rc); + } + + arguments = new Arguments (interpolations.Count); + + var sb = new StringBuilder (start.Value); + for (int i = 0; i < interpolations.Count; ++i) { + if (i % 2 == 0) { + sb.Append ('{').Append (i / 2); + var isi = (InterpolatedStringInsert)interpolations [i]; + if (isi.Alignment != null) { + sb.Append (','); + var value = isi.ResolveAligment (rc); + if (value != null) + sb.Append (value.Value); + } + + if (isi.Format != null) { + sb.Append (':'); + sb.Append (isi.Format); + } + + sb.Append ('}'); + arguments.Add (new Argument (interpolations [i])); + } else { + sb.Append (((StringLiteral)interpolations [i]).Value); + } + } + + sb.Append (end.Value); + str = sb.ToString (); + } + + arguments.Insert (0, new Argument (new StringLiteral (rc.BuiltinTypes, str, start.Location))); + + eclass = ExprClass.Value; + type = rc.BuiltinTypes.String; + return this; + } + + public override void Emit (EmitContext ec) + { + // No interpolation, convert to simple string result (needs to match string.Format unescaping) + if (interpolations == null) { + var str = start.Value.Replace ("{{", "{").Replace ("}}", "}"); + if (str != start.Value) + new StringConstant (ec.BuiltinTypes, str, loc).Emit (ec); + else + start.Emit (ec); + + return; + } + + var best = ResolveBestFormatOverload (new ResolveContext (ec.MemberContext)); + if (best == null) + return; + + var ca = new CallEmitter (); + ca.Emit (ec, best, arguments, loc); + } + + MethodSpec ResolveBestFormatOverload (ResolveContext rc) + { + var members = MemberCache.FindMembers (rc.BuiltinTypes.String, "Format", true); + var res = new OverloadResolver (members, OverloadResolver.Restrictions.NoBaseMembers, loc); + return res.ResolveMember<MethodSpec> (rc, ref arguments); + } + } + + public class InterpolatedStringInsert : CompositeExpression + { + public InterpolatedStringInsert (Expression expr) + : base (expr) + { + } + + public Expression Alignment { get; set; } + public string Format { get; set; } + + protected override Expression DoResolve (ResolveContext rc) + { + var expr = base.DoResolve (rc); + if (expr == null) + return null; + + // + // For better error reporting, assumes the built-in implementation uses object + // as argument(s) + // + return Convert.ImplicitConversionRequired (rc, expr, rc.BuiltinTypes.Object, expr.Location); + } + + public int? ResolveAligment (ResolveContext rc) + { + var c = Alignment.ResolveLabelConstant (rc); + if (c == null) + return null; + + c = c.ImplicitConversionRequired (rc, rc.BuiltinTypes.Int); + if (c == null) + return null; + + var value = (int) c.GetValueAsLong (); + if (value > 32767 || value < -32767) { + rc.Report.Warning (8094, 1, Alignment.Location, + "Alignment value has a magnitude greater than 32767 and may result in a large formatted string"); + } + + return value; + } + } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs index 265e4362..c73426c5 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs @@ -424,7 +424,7 @@ namespace Mono.CSharp } // Create nested fixed buffer container - string name = String.Format ("<{0}>__FixedBuffer{1}", Name, GlobalCounter++); + string name = String.Format ("<{0}>__FixedBuffer{1}", TypeDefinition.FilterNestedName (Name), GlobalCounter++); fixed_buffer_type = Parent.TypeBuilder.DefineNestedType (name, TypeAttributes.NestedPublic | TypeAttributes.Sealed | TypeAttributes.BeforeFieldInit, Compiler.BuiltinTypes.ValueType.GetMetaInfo ()); @@ -609,9 +609,23 @@ namespace Mono.CSharp if (TypeSpec.IsReferenceType (MemberType)) return true; - if (MemberType.IsEnum) + if (MemberType.IsPointer) return true; + if (MemberType.IsEnum) { + switch (EnumSpec.GetUnderlyingType (MemberType).BuiltinType) { + case BuiltinTypeSpec.Type.SByte: + case BuiltinTypeSpec.Type.Byte: + case BuiltinTypeSpec.Type.Short: + case BuiltinTypeSpec.Type.UShort: + case BuiltinTypeSpec.Type.Int: + case BuiltinTypeSpec.Type.UInt: + return true; + default: + return false; + } + } + return false; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs index dbb74a75..da30a3e5 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs @@ -105,7 +105,7 @@ namespace Mono.CSharp return struct_info.GetStructField (name); } - public static TypeInfo GetTypeInfo (TypeSpec type) + public static TypeInfo GetTypeInfo (TypeSpec type, IMemberContext context) { if (!type.IsStruct) return simple_type; @@ -114,7 +114,7 @@ namespace Mono.CSharp if (type_hash.TryGetValue (type, out info)) return info; - var struct_info = StructInfo.GetStructInfo (type); + var struct_info = StructInfo.GetStructInfo (type, context); if (struct_info != null) { info = new TypeInfo (struct_info, 0); } else { @@ -139,7 +139,7 @@ namespace Mono.CSharp var field = struct_info.Fields[i]; if (!fc.IsStructFieldDefinitelyAssigned (vi, field.Name)) { - var bf = field.MemberDefinition as Property.BackingField; + var bf = field.MemberDefinition as Property.BackingFieldDeclaration; if (bf != null) { if (bf.Initializer != null) continue; @@ -184,11 +184,11 @@ namespace Mono.CSharp // // We only need one instance per type // - StructInfo (TypeSpec type) + StructInfo (TypeSpec type, IMemberContext context) { field_type_hash.Add (type, this); - fields = MemberCache.GetAllFieldsForDefiniteAssignment (type); + fields = MemberCache.GetAllFieldsForDefiniteAssignment (type, context); struct_field_hash = new Dictionary<string, TypeInfo> (); field_hash = new Dictionary<string, int> (fields.Count); @@ -202,7 +202,7 @@ namespace Mono.CSharp var field = fields [i]; if (field.MemberType.IsStruct) - sinfo [i] = GetStructInfo (field.MemberType); + sinfo [i] = GetStructInfo (field.MemberType, context); if (sinfo [i] == null) field_hash.Add (field.Name, ++Length); @@ -260,7 +260,7 @@ namespace Mono.CSharp return null; } - public static StructInfo GetStructInfo (TypeSpec type) + public static StructInfo GetStructInfo (TypeSpec type, IMemberContext context) { if (type.BuiltinType > 0) return null; @@ -269,7 +269,7 @@ namespace Mono.CSharp if (field_type_hash.TryGetValue (type, out info)) return info; - return new StructInfo (type); + return new StructInfo (type, context); } } } @@ -305,11 +305,11 @@ namespace Mono.CSharp VariableInfo[] sub_info; - VariableInfo (string name, TypeSpec type, int offset) + VariableInfo (string name, TypeSpec type, int offset, IMemberContext context) { this.Name = name; this.Offset = offset; - this.TypeInfo = TypeInfo.GetTypeInfo (type); + this.TypeInfo = TypeInfo.GetTypeInfo (type, context); Length = TypeInfo.TotalLength; @@ -343,14 +343,14 @@ namespace Mono.CSharp public static VariableInfo Create (BlockContext bc, LocalVariable variable) { - var info = new VariableInfo (variable.Name, variable.Type, bc.AssignmentInfoOffset); + var info = new VariableInfo (variable.Name, variable.Type, bc.AssignmentInfoOffset, bc); bc.AssignmentInfoOffset += info.Length; return info; } public static VariableInfo Create (BlockContext bc, Parameter parameter) { - var info = new VariableInfo (parameter.Name, parameter.Type, bc.AssignmentInfoOffset) { + var info = new VariableInfo (parameter.Name, parameter.Type, bc.AssignmentInfoOffset, bc) { IsParameter = true }; @@ -669,7 +669,7 @@ namespace Mono.CSharp large_bits[index >> 5] |= (1 << (index & 31)); } - static bool AreEqual (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b) + public static bool AreEqual (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b) { if (a.large_bits == null) return (a.bits & ~copy_on_write_flag) == (b.bits & ~copy_on_write_flag); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs index f6d594fd..021fcbf6 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs @@ -1068,8 +1068,11 @@ namespace Mono.CSharp { return effective_base = Convert.FindMostEncompassedType (types); } - public override string GetSignatureForDocumentation () + public override string GetSignatureForDocumentation (bool explicitName) { + if (explicitName) + return Name; + var prefix = IsMethodOwned ? "``" : "`"; return prefix + DeclaredPosition; } @@ -1331,16 +1334,22 @@ namespace Mono.CSharp { foreach (var ta in targs) { var tps = ta as TypeParameterSpec; IList<TypeSpec> ifaces; + TypeSpec b_type; if (tps != null) { - var b_type = tps.GetEffectiveBase (); - if (b_type != null && b_type.BuiltinType != BuiltinTypeSpec.Type.Object && b_type.BuiltinType != BuiltinTypeSpec.Type.ValueType) - cache.AddBaseType (b_type); - + b_type = tps.GetEffectiveBase (); ifaces = tps.InterfacesDefined; } else { + b_type = ta; ifaces = ta.Interfaces; } + // + // Don't add base type which was inflated from base constraints but it's not valid + // in C# context + // + if (b_type != null && b_type.BuiltinType != BuiltinTypeSpec.Type.Object && b_type.BuiltinType != BuiltinTypeSpec.Type.ValueType && !b_type.IsStructOrEnum) + cache.AddBaseType (b_type); + if (ifaces != null) { foreach (var iface_type in ifaces) { cache.AddInterface (iface_type); @@ -2190,7 +2199,7 @@ namespace Mono.CSharp { /// <summary> /// Resolve the type arguments. /// </summary> - public virtual bool Resolve (IMemberContext ec) + public virtual bool Resolve (IMemberContext ec, bool allowUnbound) { if (atypes != null) return true; @@ -2243,9 +2252,12 @@ namespace Mono.CSharp { public class UnboundTypeArguments : TypeArguments { - public UnboundTypeArguments (int arity) + Location loc; + + public UnboundTypeArguments (int arity, Location loc) : base (new FullNamedExpression[arity]) { + this.loc = loc; } public override bool IsEmpty { @@ -2254,8 +2266,12 @@ namespace Mono.CSharp { } } - public override bool Resolve (IMemberContext ec) + public override bool Resolve (IMemberContext mc, bool allowUnbound) { + if (!allowUnbound) { + mc.Module.Compiler.Report.Error (7003, loc, "Unbound generic name is not valid in this context"); + } + // Nothing to be resolved return true; } @@ -2441,7 +2457,7 @@ namespace Mono.CSharp { if (eclass != ExprClass.Unresolved) return type; - if (!args.Resolve (mc)) + if (!args.Resolve (mc, allowUnboundTypeArguments)) return null; TypeSpec[] atypes = args.Arguments; @@ -2768,7 +2784,7 @@ namespace Mono.CSharp { // // Tracks successful rate of type inference // - int score = int.MaxValue; + int score; readonly Arguments arguments; readonly int arg_count; @@ -2841,12 +2857,12 @@ namespace Mono.CSharp { AnonymousMethodExpression am = a.Expr as AnonymousMethodExpression; if (am != null) { if (am.ExplicitTypeInference (tic, method_parameter)) - --score; + ++score; continue; } if (a.IsByRef) { - score -= tic.ExactInference (a.Type, method_parameter); + score += tic.ExactInference (a.Type, method_parameter); continue; } @@ -2854,14 +2870,14 @@ namespace Mono.CSharp { continue; if (TypeSpec.IsValueType (method_parameter)) { - score -= tic.LowerBoundInference (a.Type, method_parameter); + score += tic.LowerBoundInference (a.Type, method_parameter); continue; } // // Otherwise an output type inference is made // - score -= tic.OutputTypeInference (ec, a.Expr, method_parameter); + score += tic.OutputTypeInference (ec, a.Expr, method_parameter); } // @@ -2911,7 +2927,7 @@ namespace Mono.CSharp { if (arguments[i] == null) continue; - score -= tic.OutputTypeInference (ec, arguments[i].Expr, t_i); + score += tic.OutputTypeInference (ec, arguments[i].Expr, t_i); } } @@ -3018,7 +3034,7 @@ namespace Mono.CSharp { // Some types cannot be used as type arguments // if ((bound.Type.Kind == MemberKind.Void && !voidAllowed) || bound.Type.IsPointer || bound.Type.IsSpecialRuntimeType || - bound.Type == InternalType.MethodGroup || bound.Type == InternalType.AnonymousMethod) + bound.Type == InternalType.MethodGroup || bound.Type == InternalType.AnonymousMethod || bound.Type == InternalType.VarOutType) return; var a = bounds [index]; @@ -3044,8 +3060,8 @@ namespace Mono.CSharp { continue; } - if (TypeManager.IsGenericType (t)) - return AllTypesAreFixed (TypeManager.GetTypeArguments (t)); + if (t.IsGeneric && !AllTypesAreFixed (t.TypeArguments)) + return false; } return true; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs index 11f01009..170d231e 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs @@ -69,7 +69,7 @@ namespace Mono.CSharp.Linq { } - protected override void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) + public override void Error_TypeDoesNotContainDefinition (ResolveContext ec, TypeSpec type, string name) { ec.Report.Error (1935, loc, "An implementation of `{0}' query expression pattern could not be found. " + "Are you missing `System.Linq' using directive or `System.Core.dll' assembly reference?", diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs index 3837af2c..042a15b6 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs @@ -686,9 +686,10 @@ namespace Mono.CSharp { throw new NotImplementedException (member.GetType ().ToString ()); } - public static List<FieldSpec> GetAllFieldsForDefiniteAssignment (TypeSpec container) + public static List<FieldSpec> GetAllFieldsForDefiniteAssignment (TypeSpec container, IMemberContext context) { List<FieldSpec> fields = null; + bool imported = container.MemberDefinition.IsImported; foreach (var entry in container.MemberCache.member_hash) { foreach (var name_entry in entry.Value) { if (name_entry.Kind != MemberKind.Field) @@ -704,13 +705,7 @@ namespace Mono.CSharp { continue; var fs = (FieldSpec) name_entry; - - // - // LAMESPEC: Very bizzare hack, definitive assignment is not done - // for imported non-public reference fields except array. No idea what the - // actual csc rule is - // - if (!fs.IsPublic && container.MemberDefinition.IsImported && (!fs.MemberType.IsArray && TypeSpec.IsReferenceType (fs.MemberType))) + if (imported && ShouldIgnoreFieldForDefiniteAssignment (fs, context)) continue; //if ((fs.Modifiers & (Modifiers.BACKING_FIELD) != 0) @@ -727,6 +722,29 @@ namespace Mono.CSharp { return fields ?? new List<FieldSpec> (0); } + static bool ShouldIgnoreFieldForDefiniteAssignment (FieldSpec fs, IMemberContext context) + { + // + // LAMESPEC: This mimics csc quirk where definitive assignment is not done + // for all kinds of imported non-public struct fields + // + var mod = fs.Modifiers; + if ((mod & Modifiers.PRIVATE) == 0 && ((mod & Modifiers.INTERNAL) != 0 && fs.DeclaringType.MemberDefinition.IsInternalAsPublic (context.Module.DeclaringAssembly))) + return false; + + // + // Ignore reference type fields except when type is an array or type parameter + // + var type = fs.MemberType; + switch (type.Kind) { + case MemberKind.ArrayType: + case MemberKind.TypeParameter: + return false; + default: + return TypeSpec.IsReferenceType (type); + } + } + public static IList<MemberSpec> GetCompletitionMembers (IMemberContext ctx, TypeSpec container, string name) { var matches = new List<MemberSpec> (); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs index 7c42dbc8..96ed9e42 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs @@ -1498,15 +1498,6 @@ namespace Mono.CSharp { "`{0}': Struct constructors cannot call base constructors", caller_builder.GetSignatureForError ()); return this; } - } else { - // - // It is legal to have "this" initializers that take no arguments - // in structs - // - // struct D { public D (int a) : this () {} - // - if (ec.CurrentType.IsStruct && argument_list == null) - return this; } base_ctor = ConstructorLookup (ec, type, ref argument_list, loc); @@ -1663,12 +1654,6 @@ namespace Mono.CSharp { protected override bool CheckBase () { if ((ModFlags & Modifiers.STATIC) != 0) { - if (!parameters.IsEmpty) { - Report.Error (132, Location, "`{0}': The static constructor must be parameterless", - GetSignatureForError ()); - return false; - } - if ((caching_flags & Flags.MethodOverloadsExist) != 0) Parent.MemberCache.CheckExistingMembersOverloads (this, parameters); @@ -1683,12 +1668,6 @@ namespace Mono.CSharp { if ((caching_flags & Flags.MethodOverloadsExist) != 0) Parent.MemberCache.CheckExistingMembersOverloads (this, parameters); - if (Parent.PartialContainer.Kind == MemberKind.Struct && parameters.IsEmpty) { - Report.Error (568, Location, - "Structs cannot contain explicit parameterless constructors"); - return false; - } - CheckProtectedModifier (); return true; @@ -1719,6 +1698,11 @@ namespace Mono.CSharp { } } + if ((ModFlags & Modifiers.EXTERN) != 0 && Initializer != null) { + Report.Error (8091, Location, "`{0}': Contructors cannot be extern and have a constructor initializer", + GetSignatureForError ()); + } + var ca = ModifiersExtensions.MethodAttr (ModFlags) | MethodAttributes.RTSpecialName | MethodAttributes.SpecialName; ConstructorBuilder = Parent.TypeBuilder.DefineConstructor ( @@ -2576,6 +2560,9 @@ namespace Mono.CSharp { Implicit, Explicit, + // Pattern matching + Is, + // Just because of enum TOP }; @@ -2613,6 +2600,7 @@ namespace Mono.CSharp { names [(int) OpType.LessThanOrEqual] = new string [] { "<=", "op_LessThanOrEqual" }; names [(int) OpType.Implicit] = new string [] { "implicit", "op_Implicit" }; names [(int) OpType.Explicit] = new string [] { "explicit", "op_Explicit" }; + names [(int) OpType.Is] = new string[] { "is", "op_Is" }; } public Operator (TypeDefinition parent, OpType type, FullNamedExpression ret_type, Modifiers mod_flags, ParametersCompiled parameters, diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs index 68f1b8ec..138ec616 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs @@ -181,6 +181,7 @@ namespace Mono.CSharp var system_convert = new MemberAccess (new QualifiedAliasMember ("global", "System", loc), "Convert", loc); + var expl_block = new ExplicitBlock (top_block, loc, loc); // // var converted = System.Convert.ChangeType (obj, System.Convert.GetTypeCode (value)); @@ -198,7 +199,7 @@ namespace Mono.CSharp var changetype = new Invocation (new MemberAccess (system_convert, "ChangeType", loc), arguments_changetype); - top_block.AddStatement (new StatementExpression (new SimpleAssign (new LocalVariableReference (lv_converted, loc), changetype, loc))); + expl_block.AddStatement (new StatementExpression (new SimpleAssign (new LocalVariableReference (lv_converted, loc), changetype, loc))); // @@ -207,7 +208,13 @@ namespace Mono.CSharp var equals_arguments = new Arguments (1); equals_arguments.Add (new Argument (top_block.GetParameterReference (1, loc))); var equals_invocation = new Invocation (new MemberAccess (new LocalVariableReference (lv_converted, loc), "Equals"), equals_arguments); - top_block.AddStatement (new Return (equals_invocation, loc)); + expl_block.AddStatement (new Return (equals_invocation, loc)); + + var catch_block = new ExplicitBlock (top_block, loc, loc); + catch_block.AddStatement (new Return (new BoolLiteral (Compiler.BuiltinTypes, false, loc), loc)); + top_block.AddStatement (new TryCatch (expl_block, new List<Catch> () { + new Catch (catch_block, loc) + }, loc, false)); m.Define (); m.PrepareEmit (); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs index f4c5aba5..c37f1ad1 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs @@ -70,6 +70,9 @@ namespace Mono.CSharp { List<string> res = null; foreach (var ns in all_namespaces) { + if (ns.Key.Length == 0) + continue; + var methods = ns.Value.LookupExtensionMethod (ctx, name, arity); if (methods != null) { if (res == null) @@ -249,7 +252,7 @@ namespace Mono.CSharp { return null; foreach (var ts in found) { - if (ts.Arity == arity || mode == LookupMode.NameOf) { + if (ts.Arity == arity) { if (best == null) { if ((ts.Modifiers & Modifiers.INTERNAL) != 0 && !ts.MemberDefinition.IsInternalAsPublic (ctx.Module.DeclaringAssembly) && mode != LookupMode.IgnoreAccessibility) continue; @@ -488,8 +491,22 @@ namespace Mono.CSharp { public void RemoveContainer (TypeContainer tc) { - types.Remove (tc.Basename); - cached_types.Remove (tc.Basename); + IList<TypeSpec> found; + if (types.TryGetValue (tc.MemberName.Name, out found)) { + for (int i = 0; i < found.Count; ++i) { + if (tc.MemberName.Arity != found [i].Arity) + continue; + + if (found.Count == 1) + types.Remove (tc.MemberName.Name); + else + found.RemoveAt (i); + + break; + } + } + + cached_types.Remove (tc.MemberName.Basename); } public void SetBuiltinType (BuiltinTypeSpec pts) @@ -689,7 +706,7 @@ namespace Mono.CSharp { public new readonly NamespaceContainer Parent; - List<UsingNamespace> clauses; + List<UsingClause> clauses; // Used by parsed to check for parser errors public bool DeclarationFound; @@ -736,7 +753,7 @@ namespace Mono.CSharp { } } - public List<UsingNamespace> Usings { + public List<UsingClause> Usings { get { return clauses; } @@ -750,14 +767,14 @@ namespace Mono.CSharp { #endregion - public void AddUsing (UsingNamespace un) + public void AddUsing (UsingClause un) { if (DeclarationFound){ Compiler.Report.Error (1529, un.Location, "A using clause must precede all other namespace elements except extern alias declarations"); } if (clauses == null) - clauses = new List<UsingNamespace> (); + clauses = new List<UsingClause> (); clauses.Add (un); } @@ -774,7 +791,7 @@ namespace Mono.CSharp { void AddAlias (UsingAliasNamespace un) { if (clauses == null) { - clauses = new List<UsingNamespace> (); + clauses = new List<UsingClause> (); } else { foreach (var entry in clauses) { var a = entry as UsingAliasNamespace; @@ -798,9 +815,8 @@ namespace Mono.CSharp { public override void AddTypeContainer (TypeContainer tc) { - string name = tc.Basename; - var mn = tc.MemberName; + var name = mn.Basename; while (mn.Left != null) { mn = mn.Left; name = mn.Name; @@ -865,7 +881,7 @@ namespace Mono.CSharp { base.EmitContainer (); } - public ExtensionMethodCandidates LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity, int position) + public ExtensionMethodCandidates LookupExtensionMethod (IMemberContext invocationContext, string name, int arity, int position) { // // Here we try to resume the search for extension method at the point @@ -946,22 +962,18 @@ namespace Mono.CSharp { candidates.AddRange (a); } - if (candidates != null) - return new ExtensionMethodCandidates (invocationContext, candidates, this, position); - } + if (types_using_table != null) { + foreach (var t in types_using_table) { - // LAMESPEC: TODO no spec about priority over normal extension methods yet - if (types_using_table != null) { - foreach (var t in types_using_table) { - - var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity); - if (res == null) - continue; + var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity); + if (res == null) + continue; - if (candidates == null) - candidates = res; - else - candidates.AddRange (res); + if (candidates == null) + candidates = res; + else + candidates.AddRange (res); + } } if (candidates != null) @@ -1149,7 +1161,7 @@ namespace Mono.CSharp { return match; } - public static MethodGroupExpr LookupStaticUsings (IMemberContext mc, string name, int arity, Location loc) + public static Expression LookupStaticUsings (IMemberContext mc, string name, int arity, Location loc) { for (var m = mc.CurrentMemberDefinition; m != null; m = m.Parent) { @@ -1163,8 +1175,15 @@ namespace Mono.CSharp { var members = MemberCache.FindMembers (using_type, name, true); if (members != null) { foreach (var member in members) { - if ((member.Modifiers & Modifiers.METHOD_EXTENSION) != 0) - continue; + if ((member.Kind & MemberKind.NestedMask) != 0) { + // non-static nested type is included with using static + } else { + if ((member.Modifiers & Modifiers.STATIC) == 0) + continue; + + if ((member.Modifiers & Modifiers.METHOD_EXTENSION) != 0) + continue; + } if (arity > 0 && member.Arity != arity) continue; @@ -1178,8 +1197,11 @@ namespace Mono.CSharp { } } - if (candidates != null) - return new MethodGroupExpr (candidates, null, loc); + if (candidates != null) { + var expr = Expression.MemberLookupToExpression (mc, candidates, false, null, name, arity, Expression.MemberLookupRestrictions.None, loc); + if (expr != null) + return expr; + } } return null; @@ -1241,7 +1263,7 @@ namespace Mono.CSharp { var using_ns = entry.ResolvedExpression as NamespaceExpression; if (using_ns == null) { - var type = ((TypeExpr)entry.ResolvedExpression).Type; + var type = entry.ResolvedExpression.Type; if (types == null) types = new List<TypeSpec> (); @@ -1325,7 +1347,7 @@ namespace Mono.CSharp { return false; } - void Warning_DuplicateEntry (UsingNamespace entry) + void Warning_DuplicateEntry (UsingClause entry) { Compiler.Report.Warning (105, 3, entry.Location, "The using directive for `{0}' appeared previously in this namespace", @@ -1338,13 +1360,71 @@ namespace Mono.CSharp { } } - public class UsingNamespace + public class UsingNamespace : UsingClause + { + public UsingNamespace (ATypeNameExpression expr, Location loc) + : base (expr, loc) + { + } + + public override void Define (NamespaceContainer ctx) + { + base.Define (ctx); + + var ns = resolved as NamespaceExpression; + if (ns != null) + return; + + if (resolved != null) { + var compiler = ctx.Module.Compiler; + var type = resolved.Type; + + compiler.Report.SymbolRelatedToPreviousError (type); + compiler.Report.Error (138, Location, + "A `using' directive can only be applied to namespaces but `{0}' denotes a type. Consider using a `using static' instead", + type.GetSignatureForError ()); + } + } + } + + public class UsingType : UsingClause + { + public UsingType (ATypeNameExpression expr, Location loc) + : base (expr, loc) + { + } + + public override void Define (NamespaceContainer ctx) + { + base.Define (ctx); + + if (resolved == null) + return; + + var ns = resolved as NamespaceExpression; + if (ns != null) { + var compiler = ctx.Module.Compiler; + compiler.Report.Error (7007, Location, + "A 'using static' directive can only be applied to types but `{0}' denotes a namespace. Consider using a `using' directive instead", + ns.GetSignatureForError ()); + return; + } + + // TODO: Need to move it to post_process_using_aliases + //ObsoleteAttribute obsolete_attr = resolved.Type.GetAttributeObsolete (); + //if (obsolete_attr != null) { + // AttributeTester.Report_ObsoleteMessage (obsolete_attr, resolved.GetSignatureForError (), Location, ctx.Compiler.Report); + //} + } + } + + public class UsingClause { readonly ATypeNameExpression expr; readonly Location loc; protected FullNamedExpression resolved; - public UsingNamespace (ATypeNameExpression expr, Location loc) + public UsingClause (ATypeNameExpression expr, Location loc) { this.expr = expr; this.loc = loc; @@ -1386,29 +1466,6 @@ namespace Mono.CSharp { public virtual void Define (NamespaceContainer ctx) { resolved = expr.ResolveAsTypeOrNamespace (ctx, false); - var ns = resolved as NamespaceExpression; - if (ns != null) - return; - - if (resolved != null) { - var compiler = ctx.Module.Compiler; - var type = resolved.Type; - if (compiler.Settings.Version >= LanguageVersion.V_6) { - if (!type.IsClass || !type.IsStatic) { - compiler.Report.SymbolRelatedToPreviousError (type); - compiler.Report.Error (7007, Location, - "`{0}' is not a static class. A using namespace directive can only be applied to static classes or namespace", - GetSignatureForError ()); - } - - return; - } - - compiler.Report.SymbolRelatedToPreviousError (type); - compiler.Report.Error (138, Location, - "`{0}' is a type not a namespace. A using namespace directive can only be applied to namespaces", - GetSignatureForError ()); - } } public virtual void Accept (StructuralVisitor visitor) @@ -1508,7 +1565,7 @@ namespace Mono.CSharp { throw new NotImplementedException (); } - public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + public ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) { return null; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs index e857e365..f3ed348c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs @@ -1220,12 +1220,6 @@ namespace Mono.CSharp.Nullable return ReducedExpression.Create (right, this, false).Resolve (ec); left = Convert.ImplicitConversion (ec, unwrap ?? left, rtype, loc); - - if (TypeSpec.IsValueType (left.Type) && !left.Type.IsNullableType) { - Warning_UnreachableExpression (ec, right.Location); - return ReducedExpression.Create (left, this, false).Resolve (ec); - } - type = rtype; return this; } @@ -1285,16 +1279,52 @@ namespace Mono.CSharp.Nullable return; } - left.Emit (ec); - ec.Emit (OpCodes.Dup); + // + // Null check is done on original expression not after expression is converted to + // result type. This is in most cases same but when user conversion is involved + // we can end up in situation when use operator does the null handling which is + // not what the operator is supposed to do + // + var op_expr = left as UserCast; + if (op_expr != null) { + op_expr.Source.Emit (ec); + LocalTemporary temp; + + // TODO: More load kinds can be special cased + if (!(op_expr.Source is VariableReference)) { + temp = new LocalTemporary (op_expr.Source.Type); + temp.Store (ec); + temp.Emit (ec); + op_expr.Source = temp; + } else { + temp = null; + } - // Only to make verifier happy - if (left.Type.IsGenericParameter) - ec.Emit (OpCodes.Box, left.Type); + var right_label = ec.DefineLabel (); + ec.Emit (OpCodes.Brfalse_S, right_label); + left.Emit (ec); + ec.Emit (OpCodes.Br, end_label); + ec.MarkLabel (right_label); - ec.Emit (OpCodes.Brtrue, end_label); + if (temp != null) + temp.Release (ec); + } else { + // + // Common case where expression is not modified before null check and + // we generate better/smaller code + // + left.Emit (ec); + ec.Emit (OpCodes.Dup); + + // Only to make verifier happy + if (left.Type.IsGenericParameter) + ec.Emit (OpCodes.Box, left.Type); + + ec.Emit (OpCodes.Brtrue, end_label); + + ec.Emit (OpCodes.Pop); + } - ec.Emit (OpCodes.Pop); right.Emit (ec); ec.MarkLabel (end_label); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs index 1104b1c1..db055e72 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs @@ -88,9 +88,7 @@ public class Outline { OutlineParams (method.GetParameters ()); o.Write (")"); -#if NET_2_0 WriteGenericConstraints (t.GetGenericArguments ()); -#endif o.WriteLine (";"); return; @@ -119,9 +117,7 @@ public class Outline { if (underlyingType != typeof (int)) o.Write (" : {0}", FormatType (underlyingType)); } -#if NET_2_0 WriteGenericConstraints (t.GetGenericArguments ()); -#endif o.WriteLine (" {"); o.Indent++; @@ -396,15 +392,11 @@ public class Outline { } o.Write (mi.Name); -#if NET_2_0 o.Write (FormatGenericParams (mi.GetGenericArguments ())); -#endif o.Write (" ("); OutlineParams (mi.GetParameters ()); o.Write (")"); -#if NET_2_0 WriteGenericConstraints (mi.GetGenericArguments ()); -#endif o.Write (";"); } @@ -563,7 +555,6 @@ public class Outline { } } -#if NET_2_0 string FormatGenericParams (Type [] args) { StringBuilder sb = new StringBuilder (); @@ -579,7 +570,6 @@ public class Outline { sb.Append (">"); return sb.ToString (); } -#endif // TODO: fine tune this so that our output is less verbose. We need to figure // out a way to do this while not making things confusing. @@ -679,9 +669,7 @@ public class Outline { void GetTypeName (StringBuilder sb, Type t) { sb.Append (RemoveGenericArity (t.Name)); -#if NET_2_0 sb.Append (FormatGenericParams (t.GetGenericArguments ())); -#endif } string GetFullName (Type t) @@ -693,12 +681,10 @@ public class Outline { void GetFullName_recursed (StringBuilder sb, Type t, bool recursed) { -#if NET_2_0 if (t.IsGenericParameter) { sb.Append (t.Name); return; } -#endif if (t.DeclaringType != null) { GetFullName_recursed (sb, t.DeclaringType, true); @@ -716,7 +702,6 @@ public class Outline { GetTypeName (sb, t); } -#if NET_2_0 void WriteGenericConstraints (Type [] args) { @@ -772,7 +757,6 @@ public class Outline { } } } -#endif string OperatorFromName (string name) { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs index 1a30ae38..adac136f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs @@ -1418,7 +1418,7 @@ namespace Mono.CSharp { expr = Child; - if (!(expr is Constant || expr is DefaultValueExpression || (expr is New && ((New) expr).IsDefaultStruct))) { + if (!(expr is Constant || expr is DefaultValueExpression || (expr is New && ((New) expr).IsGeneratedStructConstructor))) { if (!(expr is ErrorExpression)) { rc.Report.Error (1736, Location, "The expression being assigned to optional parameter `{0}' must be a constant or default value", diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs index 0f863a7b..66114282 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs @@ -108,7 +108,7 @@ namespace Mono.CSharp { throw new NotImplementedException (); } - public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + public ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) { throw new NotImplementedException (); } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs index 979a8e83..1407603f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs @@ -337,18 +337,22 @@ namespace Mono.CSharp ModFlags |= method.ModFlags; flags = method.flags; } else { - if (container.Kind == MemberKind.Interface) + CheckModifiers (ModFlags); + ModFlags |= (method.ModFlags & (~Modifiers.AccessibilityMask)); + ModFlags |= Modifiers.PROPERTY_CUSTOM; + + if (container.Kind == MemberKind.Interface) { Report.Error (275, Location, "`{0}': accessibility modifiers may not be used on accessors in an interface", GetSignatureForError ()); - else if ((method.ModFlags & Modifiers.ABSTRACT) != 0 && (ModFlags & Modifiers.PRIVATE) != 0) { - Report.Error (442, Location, "`{0}': abstract properties cannot have private accessors", GetSignatureForError ()); + } else if ((ModFlags & Modifiers.PRIVATE) != 0) { + if ((method.ModFlags & Modifiers.ABSTRACT) != 0) { + Report.Error (442, Location, "`{0}': abstract properties cannot have private accessors", GetSignatureForError ()); + } + + ModFlags &= ~Modifiers.VIRTUAL; } - CheckModifiers (ModFlags); - ModFlags |= (method.ModFlags & (~Modifiers.AccessibilityMask)); - ModFlags |= Modifiers.PROPERTY_CUSTOM; - flags = ModifiersExtensions.MethodAttr (ModFlags); - flags |= (method.flags & (~MethodAttributes.MemberAccessMask)); + flags = ModifiersExtensions.MethodAttr (ModFlags) | MethodAttributes.SpecialName; } CheckAbstractAndExtern (block != null); @@ -531,7 +535,12 @@ namespace Mono.CSharp ok = false; } } else if (Get.HasCustomAccessModifier || base_prop.HasDifferentAccessibility) { - if (!CheckAccessModifiers (Get, base_prop.Get)) { + if (!base_prop.Get.IsAccessible (this)) { + // Same as csc but it should be different error code + Report.Error (115, Get.Location, "`{0}' is marked as an override but no accessible `get' accessor found to override", + GetSignatureForError ()); + ok = false; + } else if (!CheckAccessModifiers (Get, base_prop.Get)) { Error_CannotChangeAccessModifiers (Get, base_prop.Get); ok = false; } @@ -547,6 +556,12 @@ namespace Mono.CSharp GetSignatureForError (), base_prop.GetSignatureForError ()); ok = false; } + + if (Get.IsCompilerGenerated) { + Report.Error (8080, Location, "`{0}': Auto-implemented properties must override all accessors of the overridden property", + GetSignatureForError ()); + ok = false; + } } else { if (!base_prop.HasSet) { if (ok) { @@ -557,7 +572,12 @@ namespace Mono.CSharp ok = false; } } else if (Set.HasCustomAccessModifier || base_prop.HasDifferentAccessibility) { - if (!CheckAccessModifiers (Set, base_prop.Set)) { + if (!base_prop.Set.IsAccessible (this)) { + // Same as csc but it should be different error code + Report.Error (115, Set.Location, "`{0}' is marked as an override but no accessible `set' accessor found to override", + GetSignatureForError ()); + ok = false; + } else if (!CheckAccessModifiers (Set, base_prop.Set)) { Error_CannotChangeAccessModifiers (Set, base_prop.Set); ok = false; } @@ -728,12 +748,12 @@ namespace Mono.CSharp public class Property : PropertyBase { - public sealed class BackingField : Field + public sealed class BackingFieldDeclaration : Field { readonly Property property; const Modifiers DefaultModifiers = Modifiers.BACKING_FIELD | Modifiers.COMPILER_GENERATED | Modifiers.PRIVATE | Modifiers.DEBUGGER_HIDDEN; - public BackingField (Property p, bool readOnly) + public BackingFieldDeclaration (Property p, bool readOnly) : base (p.Parent, p.type_expr, DefaultModifiers | (p.ModFlags & (Modifiers.STATIC | Modifiers.UNSAFE)), new MemberName ("<" + p.GetFullName (p.MemberName) + ">k__BackingField", p.Location), null) { @@ -756,8 +776,6 @@ namespace Mono.CSharp static readonly string[] attribute_target_auto = new string[] { "property", "field" }; - Field backing_field; - public Property (TypeDefinition parent, FullNamedExpression type, Modifiers mod, MemberName name, Attributes attrs) : base (parent, type, mod, @@ -768,6 +786,8 @@ namespace Mono.CSharp { } + public BackingFieldDeclaration BackingField { get; private set; } + public Expression Initializer { get; set; } public override void Accept (StructuralVisitor visitor) @@ -778,7 +798,7 @@ namespace Mono.CSharp public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { if (a.Target == AttributeTargets.Field) { - backing_field.ApplyAttributeBuilder (a, ctor, cdata, pa); + BackingField.ApplyAttributeBuilder (a, ctor, cdata, pa); return; } @@ -788,20 +808,20 @@ namespace Mono.CSharp void CreateAutomaticProperty () { // Create backing field - backing_field = new BackingField (this, Initializer != null && Set == null); - if (!backing_field.Define ()) + BackingField = new BackingFieldDeclaration (this, Initializer == null && Set == null); + if (!BackingField.Define ()) return; if (Initializer != null) { - backing_field.Initializer = Initializer; - Parent.RegisterFieldForInitialization (backing_field, new FieldInitializer (backing_field, Initializer, Location)); - backing_field.ModFlags |= Modifiers.READONLY; + BackingField.Initializer = Initializer; + Parent.RegisterFieldForInitialization (BackingField, new FieldInitializer (BackingField, Initializer, Location)); + BackingField.ModFlags |= Modifiers.READONLY; } - Parent.PartialContainer.Members.Add (backing_field); + Parent.PartialContainer.Members.Add (BackingField); - FieldExpr fe = new FieldExpr (backing_field, Location); - if ((backing_field.ModFlags & Modifiers.STATIC) == 0) + FieldExpr fe = new FieldExpr (BackingField, Location); + if ((BackingField.ModFlags & Modifiers.STATIC) == 0) fe.InstanceExpression = new CompilerGeneratedThis (Parent.CurrentType, Location); // @@ -839,7 +859,7 @@ namespace Mono.CSharp GetSignatureForError ()); if (IsInterface) - Report.Error (8053, Location, "`{0}': Properties inside interfaces cannot have initializers", + Report.Error (8052, Location, "`{0}': Properties inside interfaces cannot have initializers", GetSignatureForError ()); if (Compiler.Settings.Version < LanguageVersion.V_6) @@ -848,16 +868,11 @@ namespace Mono.CSharp if (auto) { if (Get == null) { - Report.Error (8052, Location, "Auto-implemented property `{0}' must have get accessor", + Report.Error (8051, Location, "Auto-implemented property `{0}' must have get accessor", GetSignatureForError ()); return false; } - if (Initializer == null && AccessorSecond == null) { - Report.Error (8051, Location, "Auto-implemented property `{0}' must have set accessor or initializer", - GetSignatureForError ()); - } - if (Compiler.Settings.Version < LanguageVersion.V_3 && Initializer == null) Report.FeatureIsNotAvailable (Compiler, Location, "auto-implemented properties"); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs index e9b16d1c..74bbb46c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs @@ -58,7 +58,7 @@ namespace Mono.CSharp { 3021, 3022, 3023, 3024, 3026, 3027, 4014, 4024, 4025, 4026, 7035, 7080, 7081, 7082, 7095, - 8009, + 8009, 8094 }; static HashSet<int> AllWarningsHashSet; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs index 18249431..69be5921 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs @@ -1135,7 +1135,7 @@ namespace Mono.CSharp { var block_return_type = ec.ReturnType; if (expr == null) { - if (block_return_type.Kind == MemberKind.Void) + if (block_return_type.Kind == MemberKind.Void || block_return_type == InternalType.ErrorType) return true; // @@ -1408,15 +1408,10 @@ namespace Mono.CSharp { protected override bool DoFlowAnalysis (FlowAnalysisContext fc) { - if (fc.LabelStack == null) { - fc.LabelStack = new List<LabeledStatement> (); - } else if (fc.LabelStack.Contains (label)) { + if (fc.AddReachedLabel (label)) return true; - } - fc.LabelStack.Add (label); label.Block.ScanGotoJump (label, fc); - fc.LabelStack.Remove (label); return true; } @@ -2966,6 +2961,7 @@ namespace Mono.CSharp { bool DoFlowAnalysis (FlowAnalysisContext fc, int startIndex) { bool end_unreachable = !reachable; + bool goto_flow_analysis = startIndex != 0; for (; startIndex < statements.Count; ++startIndex) { var s = statements[startIndex]; @@ -2989,10 +2985,14 @@ namespace Mono.CSharp { // this for flow-analysis only to carry variable info correctly. // if (end_unreachable) { + bool after_goto_case = goto_flow_analysis && s is GotoCase; + for (++startIndex; startIndex < statements.Count; ++startIndex) { s = statements[startIndex]; if (s is SwitchLabel) { - s.FlowAnalysis (fc); + if (!after_goto_case) + s.FlowAnalysis (fc); + break; } @@ -3001,7 +3001,20 @@ namespace Mono.CSharp { statements [startIndex] = RewriteUnreachableStatement (s); } } + + // + // Idea is to stop after goto case because goto case will always have at least same + // variable assigned as switch case label. This saves a lot for complex goto case tests + // + if (after_goto_case) + break; + + continue; } + + var lb = s as LabeledStatement; + if (lb != null && fc.AddReachedLabel (lb)) + break; } // @@ -3025,7 +3038,7 @@ namespace Mono.CSharp { // L: // v = 1; - if (s is BlockVariable) + if (s is BlockVariable || s is EmptyStatement) return s; return new EmptyStatement (s.loc); @@ -3206,15 +3219,15 @@ namespace Mono.CSharp { public override void Emit (EmitContext ec) { + if (Parent != null) + ec.BeginScope (); + EmitScopeInitialization (ec); if (ec.EmitAccurateDebugInfo && !IsCompilerGenerated && ec.Mark (StartLocation)) { ec.Emit (OpCodes.Nop); } - if (Parent != null) - ec.BeginScope (); - DoEmit (ec); if (Parent != null) @@ -3266,7 +3279,7 @@ namespace Mono.CSharp { // // We are the first storey on path and 'this' has to be hoisted // - if (storey.HoistedThis == null) { + if (storey.HoistedThis == null || !(storey.Parent is HoistedStoreyClass)) { foreach (ExplicitBlock ref_block in Original.ParametersBlock.TopBlock.ThisReferencesFromChildrenBlock) { // // ThisReferencesFromChildrenBlock holds all reference even if they @@ -4471,6 +4484,8 @@ namespace Mono.CSharp { } } + public bool PatternMatching { get; set; } + public bool SectionStart { get; set; } public Label GetILLabel (EmitContext ec) @@ -4492,7 +4507,7 @@ namespace Mono.CSharp { if (!SectionStart) return false; - fc.DefiniteAssignment = new DefiniteAssignmentBitSet (fc.SwitchInitialDefinitiveAssignment); + fc.BranchDefiniteAssignment (fc.SwitchInitialDefinitiveAssignment); return false; } @@ -4508,21 +4523,33 @@ namespace Mono.CSharp { // Resolves the expression, reduces it to a literal if possible // and then converts it to the requested type. // - bool ResolveAndReduce (BlockContext rc) + bool ResolveAndReduce (BlockContext bc) { if (IsDefault) return true; - var c = label.ResolveLabelConstant (rc); + var switch_statement = bc.Switch; + + if (PatternMatching) { + label = new Is (switch_statement.ExpressionValue, label, loc).Resolve (bc); + return label != null; + } + + var c = label.ResolveLabelConstant (bc); if (c == null) return false; - if (rc.Switch.IsNullable && c is NullLiteral) { + if (switch_statement.IsNullable && c is NullLiteral) { converted = c; return true; } - converted = c.ImplicitConversionRequired (rc, rc.Switch.SwitchType); + if (switch_statement.IsPatternMatching) { + label = new Is (switch_statement.ExpressionValue, label, loc).Resolve (bc); + return true; + } + + converted = c.ImplicitConversionRequired (bc, switch_statement.SwitchType); return converted != null; } @@ -4728,12 +4755,24 @@ namespace Mono.CSharp { } } + public bool IsPatternMatching { + get { + return new_expr == null && SwitchType != null; + } + } + public List<SwitchLabel> RegisteredLabels { get { return case_labels; } } + public VariableReference ExpressionValue { + get { + return value; + } + } + // // Determines the governing type for a switch. The returned // expression might be the expression from the switch, or an @@ -4843,6 +4882,9 @@ namespace Mono.CSharp { return; } + if (sl.Converted == null) + return; + try { if (string_labels != null) { string string_value = sl.Converted.GetValue () as string; @@ -4851,7 +4893,7 @@ namespace Mono.CSharp { else string_labels.Add (string_value, sl); } else { - if (sl.Converted is NullLiteral) { + if (sl.Converted.IsNull) { case_null = sl; } else { labels.Add (sl.Converted.GetValueAsLong (), sl); @@ -5015,7 +5057,17 @@ namespace Mono.CSharp { } } - return sl; + if (sl == null || sl.SectionStart) + return sl; + + // + // Always return section start, it simplifies handling of switch labels + // + for (int idx = case_labels.IndexOf (sl); ; --idx) { + var cs = case_labels [idx]; + if (cs.SectionStart) + return cs; + } } protected override bool DoFlowAnalysis (FlowAnalysisContext fc) @@ -5066,39 +5118,44 @@ namespace Mono.CSharp { } } + Expression switch_expr; if (new_expr == null) { - if (Expr.Type != InternalType.ErrorType) { - ec.Report.Error (151, loc, - "A switch expression of type `{0}' cannot be converted to an integral type, bool, char, string, enum or nullable type", - Expr.Type.GetSignatureForError ()); - } + if (ec.Module.Compiler.Settings.Version != LanguageVersion.Experimental) { + if (Expr.Type != InternalType.ErrorType) { + ec.Report.Error (151, loc, + "A switch expression of type `{0}' cannot be converted to an integral type, bool, char, string, enum or nullable type", + Expr.Type.GetSignatureForError ()); + } - return false; - } + return false; + } - SwitchType = new_expr.Type; - if (SwitchType.IsNullableType) { - new_expr = unwrap = Nullable.Unwrap.Create (new_expr, true); - SwitchType = Nullable.NullableInfo.GetUnderlyingType (SwitchType); - } + switch_expr = Expr; + SwitchType = Expr.Type; + } else { + switch_expr = new_expr; + SwitchType = new_expr.Type; + if (SwitchType.IsNullableType) { + new_expr = unwrap = Nullable.Unwrap.Create (new_expr, true); + SwitchType = Nullable.NullableInfo.GetUnderlyingType (SwitchType); + } - if (SwitchType.BuiltinType == BuiltinTypeSpec.Type.Bool && ec.Module.Compiler.Settings.Version == LanguageVersion.ISO_1) { - ec.Report.FeatureIsNotAvailable (ec.Module.Compiler, loc, "switch expression of boolean type"); - return false; - } + if (SwitchType.BuiltinType == BuiltinTypeSpec.Type.Bool && ec.Module.Compiler.Settings.Version == LanguageVersion.ISO_1) { + ec.Report.FeatureIsNotAvailable (ec.Module.Compiler, loc, "switch expression of boolean type"); + return false; + } - if (block.Statements.Count == 0) - return true; + if (block.Statements.Count == 0) + return true; - if (SwitchType.BuiltinType == BuiltinTypeSpec.Type.String) { - string_labels = new Dictionary<string, SwitchLabel> (); - } else { - labels = new Dictionary<long, SwitchLabel> (); + if (SwitchType.BuiltinType == BuiltinTypeSpec.Type.String) { + string_labels = new Dictionary<string, SwitchLabel> (); + } else { + labels = new Dictionary<long, SwitchLabel> (); + } } - case_labels = new List<SwitchLabel> (); - - var constant = new_expr as Constant; + var constant = switch_expr as Constant; // // Don't need extra variable for constant switch or switch with @@ -5108,7 +5165,7 @@ namespace Mono.CSharp { // // Store switch expression for comparison purposes // - value = new_expr as VariableReference; + value = switch_expr as VariableReference; if (value == null && !HasOnlyDefaultSection ()) { var current_block = ec.CurrentBlock; ec.CurrentBlock = Block; @@ -5119,6 +5176,8 @@ namespace Mono.CSharp { } } + case_labels = new List<SwitchLabel> (); + Switch old_switch = ec.Switch; ec.Switch = this; var parent_los = ec.EnclosingLoopOrSwitch; @@ -5411,6 +5470,11 @@ namespace Mono.CSharp { var constant = label.Converted; + if (constant == null) { + label.Label.EmitBranchable (ec, label.GetILLabel (ec), true); + continue; + } + if (equal_method != null) { value.Emit (ec); constant.Emit (ec); @@ -5436,6 +5500,11 @@ namespace Mono.CSharp { void EmitDispatch (EmitContext ec) { + if (IsPatternMatching) { + EmitShortSwitch (ec); + return; + } + if (value == null) { // // Constant switch, we've already done the work if there is only 1 label @@ -5483,12 +5552,14 @@ namespace Mono.CSharp { if (value != null) { ec.Mark (loc); + + var switch_expr = new_expr ?? Expr; if (IsNullable) { unwrap.EmitCheck (ec); ec.Emit (OpCodes.Brfalse, nullLabel); - value.EmitAssign (ec, new_expr, false, false); - } else if (new_expr != value) { - value.EmitAssign (ec, new_expr, false, false); + value.EmitAssign (ec, switch_expr, false, false); + } else if (switch_expr != value) { + value.EmitAssign (ec, switch_expr, false, false); } @@ -6428,6 +6499,31 @@ namespace Mono.CSharp { public class Catch : Statement { + class CatchVariableStore : Statement + { + readonly Catch ctch; + + public CatchVariableStore (Catch ctch) + { + this.ctch = ctch; + } + + protected override void CloneTo (CloneContext clonectx, Statement target) + { + } + + protected override void DoEmit (EmitContext ec) + { + // Emits catch variable debug information inside correct block + ctch.EmitCatchVariableStore (ec); + } + + protected override bool DoFlowAnalysis (FlowAnalysisContext fc) + { + return true; + } + } + class FilterStatement : Statement { readonly Catch ctch; @@ -6557,9 +6653,6 @@ namespace Mono.CSharp { ec.BeginExceptionFilterBlock (); ec.Emit (OpCodes.Isinst, IsGeneral ? ec.BuiltinTypes.Object : CatchType); - if (li != null) - EmitCatchVariableStore (ec); - if (Block.HasAwait) { Block.EmitScopeInitialization (ec); } else { @@ -6574,14 +6667,15 @@ namespace Mono.CSharp { else ec.BeginCatchBlock (CatchType); - if (li != null) { - EmitCatchVariableStore (ec); - } else { + if (li == null) ec.Emit (OpCodes.Pop); - } - if (!Block.HasAwait) + if (Block.HasAwait) { + if (li != null) + EmitCatchVariableStore (ec); + } else { Block.Emit (ec); + } } void EmitCatchVariableStore (EmitContext ec) @@ -6589,9 +6683,9 @@ namespace Mono.CSharp { li.CreateBuilder (ec); // - // Special case hoisted catch variable, we have to use a temporary variable - // to pass via anonymous storey initialization with the value still on top - // of the stack + // For hoisted catch variable we have to use a temporary local variable + // for captured variable initialization during storey setup because variable + // needs to be on the stack after storey instance for stfld operation // if (li.HoistedVariant != null) { hoisted_temp = new LocalTemporary (li.Type); @@ -6607,6 +6701,9 @@ namespace Mono.CSharp { using (bc.Set (ResolveContext.Options.CatchScope)) { if (type_expr == null) { if (CreateExceptionVariable (bc.Module.Compiler.BuiltinTypes.Object)) { + if (!block.HasAwait || Filter != null) + block.AddScopeStatement (new CatchVariableStore (this)); + Expression source = new EmptyExpression (li.Type); assign = new CompilerAssign (new LocalVariableReference (li, Location.Null), source, Location.Null); Block.AddScopeStatement (new StatementExpression (assign, Location.Null)); @@ -6630,6 +6727,9 @@ namespace Mono.CSharp { if (li.Type.IsGenericParameter) source = new UnboxCast (source, li.Type); + if (!block.HasAwait || Filter != null) + block.AddScopeStatement (new CatchVariableStore (this)); + // // Uses Location.Null to hide from symbol file // @@ -7143,7 +7243,7 @@ namespace Mono.CSharp { DefiniteAssignmentBitSet try_fc = res ? null : fc.DefiniteAssignment; foreach (var c in clauses) { - fc.DefiniteAssignment = new DefiniteAssignmentBitSet (start_fc); + fc.BranchDefiniteAssignment (start_fc); if (!c.FlowAnalysis (fc)) { if (try_fc == null) try_fc = fc.DefiniteAssignment; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs index 6e785dfc..b16e2f38 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs @@ -233,6 +233,11 @@ namespace Mono.CSharp public readonly PredefinedType INotifyCompletion; public readonly PredefinedType ICriticalNotifyCompletion; + // C# 6.0 + public readonly PredefinedType IFormattable; + public readonly PredefinedType FormattableString; + public readonly PredefinedType FormattableStringFactory; + public PredefinedTypes (ModuleContainer module) { TypedReference = new PredefinedType (module, MemberKind.Struct, "System", "TypedReference"); @@ -286,6 +291,10 @@ namespace Mono.CSharp INotifyCompletion = new PredefinedType (module, MemberKind.Interface, "System.Runtime.CompilerServices", "INotifyCompletion"); ICriticalNotifyCompletion = new PredefinedType (module, MemberKind.Interface, "System.Runtime.CompilerServices", "ICriticalNotifyCompletion"); + IFormattable = new PredefinedType (module, MemberKind.Interface, "System", "IFormattable"); + FormattableString = new PredefinedType (module, MemberKind.Class, "System", "FormattableString"); + FormattableStringFactory = new PredefinedType (module, MemberKind.Class, "System.Runtime.CompilerServices", "FormattableStringFactory"); + // // Define types which are used for comparison. It does not matter // if they don't exist as no error report is needed @@ -322,6 +331,9 @@ namespace Mono.CSharp TaskGeneric.TypeSpec.IsGenericTask = true; SwitchUserTypes = Switch.CreateSwitchUserTypes (module, Nullable.TypeSpec); + + IFormattable.Define (); + FormattableString.Define (); } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs index a33159d8..aec01995 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs @@ -490,17 +490,22 @@ namespace Mono.CSharp // // Text representation of type used by documentation writer // - public override string GetSignatureForDocumentation () + public sealed override string GetSignatureForDocumentation () + { + return GetSignatureForDocumentation (false); + } + + public virtual string GetSignatureForDocumentation (bool explicitName) { StringBuilder sb = new StringBuilder (); if (IsNested) { - sb.Append (DeclaringType.GetSignatureForDocumentation ()); - } else { - sb.Append (MemberDefinition.Namespace); + sb.Append (DeclaringType.GetSignatureForDocumentation (explicitName)); + } else if (MemberDefinition.Namespace != null) { + sb.Append (explicitName ? MemberDefinition.Namespace.Replace ('.', '#') : MemberDefinition.Namespace); } if (sb.Length != 0) - sb.Append ("."); + sb.Append (explicitName ? "#" : "."); sb.Append (Name); if (Arity > 0) { @@ -510,7 +515,7 @@ namespace Mono.CSharp if (i > 0) sb.Append (","); - sb.Append (TypeArguments[i].GetSignatureForDocumentation ()); + sb.Append (TypeArguments[i].GetSignatureForDocumentation (explicitName)); } sb.Append ("}"); } else { @@ -522,33 +527,6 @@ namespace Mono.CSharp return sb.ToString (); } - public string GetExplicitNameSignatureForDocumentation () - { - StringBuilder sb = new StringBuilder (); - if (IsNested) { - sb.Append (DeclaringType.GetExplicitNameSignatureForDocumentation ()); - } else if (MemberDefinition.Namespace != null) { - sb.Append (MemberDefinition.Namespace.Replace ('.', '#')); - } - - if (sb.Length != 0) - sb.Append ("#"); - - sb.Append (Name); - if (Arity > 0) { - sb.Append ("{"); - for (int i = 0; i < Arity; ++i) { - if (i > 0) - sb.Append (","); - - sb.Append (TypeArguments[i].GetExplicitNameSignatureForDocumentation ()); - } - sb.Append ("}"); - } - - return sb.ToString (); - } - public override string GetSignatureForError () { string s; @@ -1446,6 +1424,7 @@ namespace Mono.CSharp public static readonly InternalType FakeInternalType = new InternalType ("<fake$type>"); public static readonly InternalType Namespace = new InternalType ("<namespace>"); public static readonly InternalType ErrorType = new InternalType ("<error>"); + public static readonly InternalType VarOutType = new InternalType ("var out"); readonly string name; @@ -1658,9 +1637,9 @@ namespace Mono.CSharp return null; } - public override string GetSignatureForDocumentation () + public override string GetSignatureForDocumentation (bool explicitName) { - return Element.GetSignatureForDocumentation () + GetPostfixSignature (); + return Element.GetSignatureForDocumentation (explicitName) + GetPostfixSignature (); } public override string GetSignatureForError () @@ -1893,29 +1872,33 @@ namespace Mono.CSharp return sb.ToString (); } - public override string GetSignatureForDocumentation () + public override string GetSignatureForDocumentation (bool explicitName) { StringBuilder sb = new StringBuilder (); - GetElementSignatureForDocumentation (sb); + GetElementSignatureForDocumentation (sb, explicitName); return sb.ToString (); } - void GetElementSignatureForDocumentation (StringBuilder sb) + void GetElementSignatureForDocumentation (StringBuilder sb, bool explicitName) { var ac = Element as ArrayContainer; if (ac == null) - sb.Append (Element.GetSignatureForDocumentation ()); + sb.Append (Element.GetSignatureForDocumentation (explicitName)); else - ac.GetElementSignatureForDocumentation (sb); + ac.GetElementSignatureForDocumentation (sb, explicitName); - sb.Append ("["); - for (int i = 1; i < rank; i++) { - if (i == 1) - sb.Append ("0:"); + if (explicitName) { + sb.Append (GetPostfixSignature (rank)); + } else { + sb.Append ("["); + for (int i = 1; i < rank; i++) { + if (i == 1) + sb.Append ("0:"); - sb.Append (",0:"); + sb.Append (",0:"); + } + sb.Append ("]"); } - sb.Append ("]"); } public static ArrayContainer MakeType (ModuleContainer module, TypeSpec element) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs index 446f56be..11783f74 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs @@ -52,6 +52,10 @@ namespace Mono.CSharp { } + public virtual void Visit (UsingClause usingClause) + { + } + public virtual void Visit (CompilationSourceFile csf) { } |